第10章 访问控制
1、What Can I Do?
权限控制,或者说是访问控制,都是某个主体(subject)对某个客体(object)需要实施某种操作(operation),而系统对这种操作的限制就是权限控制。
在一个安全系统中,确定主体的身份是“认证”解决的问题;而客体是一种资源,是主体发起的请求的对象。在主体对客体进行操作的过程中,系统控制主体不能“无限制”地对客体进行操作,这个过程就是“访问控制”。一般 在操作过程中会收到ACL策略限制。
在Web应用中,根据访客客体的不同,常见的访问控制可以分为“基于URL的访问控制”、“基于方法(Method)的访问控制”、“基于数据的访问控制”。
2、垂直权限管理
基于角色的权限管理(RBAC模型)称之为垂直权限。
Spring Security提供了两种权限管理方式,一种是“基于URL的访问控制”,另一种“基于方法的访问控制”。在SpringSecurity都是验证该用户所属的角色,以决定是否授权。
3、水平权限管理
越权访问,即为水平权限管理问题。
水平权限是指在同一角色的不同用户的权限控制问题。相对于垂直权限管理而言,水平权限问题出现在同一个角色上,一般的系统只是验证了角色,没有在角色内的用户做细分,也没有对数据的子集做细分,因此缺乏一个用户到数据之间的对应关系。
由于水平权限管理是系统缺乏一个数据级的访问控制所造成的,因此水平权限管理又可以称为“基于数据的访问控制”。
4、OAuth简介
OAuth是一个在不提供用户名和密码的情况下,授权第三方应用访问Web资源的安全协议。
OpenID解决的是认证问题,OAuth则更注重授权。
OAuth协议为用户资源的授权提供了一个安全的、开放而又简易的标准。OAuth解决了授权信任问题,第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权。
5、小结
无论选择哪种访问控制方式,在设计方案时都应该满足“最小权限原则”,这是权限管理的黄金法则。