目录
认证与授权
垂直权限管理
水平权限管理
认证与授权
认证与授权是应用中最重要的两个功能点。
认证(Authentication)的目的是为了认出用户是谁,而授权(Authorization)的目的是为了决定用户能够做什么。
认证实际上就是一个验证凭证的过程,根据凭证的多少,认证可分为:
- 单因素认证(只有一个认证凭证)
- 双因素认证(有两个认证凭证)
- 多因素认证(大于两个认证凭证)
我的谁(Who am I)?
我是谁就是认证的过程。密码是最常见的一个认证手段,输入了正确的密码,理论上就可以证明你的身份。但是,如果你的密码太简单被别人爆破出来了,或者你的密码泄露了,那么别人就可以利用你的密码来以你的身份进行认证。所以,密码的设置和保存是非常重要的。网站在存储用户密码的过程时,也应该在后台将用户密码加密进行存储。最常见的就是以MD5加密,并且加入salt盐值的方式进行存储。
既然单因素认证存在安全风险,那么很多安全性要求很高的应用自然就采取了多因素认证。比如支付宝,如果采用密码进行认证外,还有手机动态口令、数字证书、宝令、支付盾和第三方证书等认证方式。
密码等认证方式一般仅仅用于登录的认证过程中,当登录完成后,用户访问每个链接时不可能都输入密码。所以,Cookie和Session出现了。
单点登录(SSO)
单点登录(Single Sign On),它只希望用户只需要登录一次,就可以访问所有的系统。SSO的出现无疑让用户的使用体验更加的便捷,但是从安全角度来看,SSO把风险都集中在一个点上。所以说,SSO的出现有利也有弊。目前,最流行的单点登录系统是 OpenID。
我能干啥(What Can I Do)?
我能干啥也就是指权限的大小。认证解决了 Who am I 的问题,而授权则解决了 What Can I Do 的问题。
权限控制,或者说访问控制,抽象得说,都是某个主体对某个客体需要实施某种操作,而系统对这种操作的限制就是权限控制。
在Web应用中,根据访问客体的不同,常见的访问控制可以分为:
- 基于URL的访问控制
- 基于方法的访问控制
- 基于数据的访问控制
垂直权限管理
访问控制实际上是建立用户与权限之间的对应关系,现在应用广泛的一种方法,就是基于角色的访问控制,简称 RBAC(Role-Based Access Control)
RBAC事先会在系统中定义不同的角色,不同的角色拥有不同的权限,一个角色实际上就是一个权限的集合。而系统的所有用户都会被分配到不同的角色中,一个用户可能拥有多个角色,角色之间有高低之分。在系统验证权限时,只需要验证用户所属的角色,然后就可以根据该角色所拥有的权限进行授权了。
在配置权限时,应当使用最小权限原则,并使用默认拒绝的策略。只对有需要的主体单独配置允许的策略。
垂直权限中容易发生的漏洞是垂直越权,即低权限用户通过修改参数获得高权限用户的权限。
水平权限管理
水平权限管理又可以称之为基于数据的访问控制。
相对于垂直权限管理来说,水平权限管理问题出在同一个角色上。系统只验证了能访问数据的角色,既没有对角色内的用户做细分,也没有对数据的子集做细分。因此缺乏一个用户到数据之间的对应关系。