在Web应用中,根据访问客体的不同,常见的访问控制可以通过解决以下几个目标问题来实现:
-
他是谁?
-
他只能访问给他授予了权限的接口!
-
他不能查看别人的数据!
下面我们以前后端分离的项目为例,解释如何解决这几个目标问题:
他是谁?
在前后端分离项目中,前端用户登录后后端服务会给其颁发一个token,比如我们所熟知的JWT(JSON Web Token),而后每次前端请求后端接口都会带上这个token。由于JWT上会带有用户信息,此时我们要做的就是校验这个token对应的用户是否为系统合法用户。
他只能访问给他授予了权限的接口!
光知道他是系统的合法用户还是不够,web应用还得保证当前用户只能访问他拥有权限的接口。
比如有个薪资查询的接口,业务上只允许部门领导角色访问。如果系统不做控制,张三知道了薪资查询接口,就拿着自己的token去调用此接口然后就能知道所有员工的薪资了,这种问题我们称之为"越权访问"。
处理这个问题现在应用广泛的一种方法就是“基于角色的访问控制(RBAC:Role-Based Access Control)”,也称“垂直权限管理”。
RBAC事先会在系统中定义出不同的角色,不同的角色拥有不同的权限,一个角色实际上就是一个权限的集合。而系统的所有用户都会被分配到不同