授权

某个主体(subject)对某个客体(object)需要实施某种操作(operation),而系统对这种操作的权限就是权限控制。

在一个安全系统中,确定主体的身份是“认证”解决的问题:而客体是一种资源,是主体发起的请求的对象。在主体对客体进行操作的过程中,系统控制主体不能“无限制”地对客体进行操作,这个过程就是“访问控制”。

主体“能够做什么”,就是权限。

垂直权限管理

访问控制实际上是建立用户与权限之间的对应关系,现在广泛应用的一种方法,就是“基于角色的访问控制(Role-Based Access Control)”,简称RBAC。

不同角色的权限有高低之分。高权限角色访问低权限角色的资源往往是被允许的,而低权限角色访问高权限角色的资源往往则被禁止。如果一个本属于低权限角色的用户通过一些方法能够获得高权限角色的能力,则发生了“越权访问”。

在配置权限时,应当使用“最小权限原则”,并使用“默认拒绝”的策略,只对有需要的主体单独配置“允许”的策略。这在很多时候能够避免发生“越权访问”。

水平权限管理

相对于垂直权限管理来说,水平权限问题出在同一个角色上。系统只验证了能访问数据的角色,既没有对角色内的用户做细分,也没有对数据的子集做细分,因此缺乏一个用户到数据之间的对应关系。由于水平权限管理是系统缺乏一个数据级的访问控制所造成的,因此水平权限管理又可以称之为“基于数据的访问权限”。

解决方案:

  1. 一个简单的数据级访问控制,可以考虑使用“用户组”的概念。比如一个用户组的数据只属于该组内的成员,只有同一用户组的成员才能实现对这些数据的操作。

  2. 此外,还可以考虑实现一个规则引擎,将访问控制的规则写在配置文件中,通过规则引擎对数据的访问进行控制。

OAuth

OAuth是一个在不提供用户名和密码的情况下,授权第三方应用访问Web资源的安全协议。