4A

  • Account - 账户
  • Authentication - 认证
  • Authorization - 授权
  • Audit - 审计

账户和认证

对于开放系统,一般由用户自主完成登陆、注册等业务流程
对于内部系统,一般由系统管理员完成注册、注销账户等业务流程,由用户完成登陆等业务流程
对于非开放接口,由系统网关对访问者进行认证

鉴权和授权

鉴权是业务逻辑的一部分,因此处于系统架构中的业务逻辑层(系统业务组件),一般实现在业务组件软件架构中的接口层(例如:MVC 软件架构模式中的控制器层),授权指的是系统管理员针对系统的某项功能或某个资源给予指定用户某种访问权限,一般通过维护一张“用户-资源-权限”表来实现

审计

记录用户的业务活动,用于行为追溯和合规性审查

权限设计方案

面向系统功能

在该方案中,我们可以根据系统的功能架构图画出一张用户权限表,每个权限对应一个系统功能,用户可直接分配权限,也可将所有权限划分不同的等级,用户分配不同的权限等级用于获取不同的权限,该方案主要面向单一资源系统,比如网络打印机和网上论坛,由于没有资源分配的概念,因此所有用户共享同一资源的所有状态,比如用户 A 对打印机发起了一次打印请求,这个时候打印机由空闲转为打印状态,如果用户 B 也发起了一次打印请求,由于资源状态共享的特性,这次请求的处理方式与 A 不同,它将被置于等待队列中

面向系统资源

在面向系统功能方案的基础上,引入资源分配的概念就构成了面向系统资源的设计方案
此方案要求我们必须先设计好系统的资源模型,然后再针对每种资源模型和其相关的功能进行设计;在管理员授权流程中,也要先对用户进行资源分配,再进行对应资源的权限(功能)分配;在鉴权流程中,鉴权逻辑需要先识别出用户所访问的资源,并进行对应的权限校验,校验通过则执行这次请求相关的业务逻辑,未通过则返回未授权访问

该方案可通过 ACM(访问控制矩阵)画出“用户-资源-权限”表

例如:
以下每一行代表一个用户,每一列代表一个特定的系统资源,每一单元格代表该列资源的访问权限
因此每一列等价于该列资源的 ACL,每一行等价于该行用户的访问配置(Access Profile)

Asset 1Asset 2FileDevice
Role 1read, write, execute, ownexecutereadwrite
Role 2readread, write, execute, own

在上例中,如果我们将单台打印机服务替换为支持多台打印机的打印服务,我们可根据打印机资源模型将这些打印机划分为不同的资源个体,针对每个资源个体分别给予不同用户不同的权限,比如用户 A 只能使用打印机 A 的服务,用户 B 只能使用打印机 B 的服务,由于分配的资源不同,资源状态不共享,用户 A 的操作也就无法影响到 B 的操作了;在网上论坛场景中,在对论坛中的所有内容(帖子、评论、评论回复等)建立版区或版块的资源模型后,我们也可以做到针对各版块的内容分别授予不同用户不同的权限等级来限制其能够访问到的内容

面向角色 - RBAC

在以上权限设计方案中,用户是直接参与方,而在 RBAC 里,系统用户被抽象为具有相同特征的角色,可理解为虚拟用户,参与资源与权限的分配,同时实际用户通过关联角色间接拥有资源和其对应的权限
RBAC 常用于有大量用户和资源的企业管理系统中,解耦了用户与资源和权限的直接关系,极大地减少了用户权限的分配管理工作

面向用户

我们的系统最终是要以一个比较友好的方式面向用户,比如简易的前端界面,在面向用户设计时,我们需要考虑用户体验,因此还需要针对用户界面做权限设计,防止用户意外访问到未经授权的页面,导致出现一些难以理解的错误,从而影响使用体验,因此需要前端在打开或切换页面的时候插入一些鉴权和未授权访问的错误提示逻辑,但这并非真正的业务鉴权,即使没有这些逻辑也不会对用户真正的访问权限产生任何影响

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐