目录

​认证与授权​

​我的谁(Who am I)?​

​单点登录(SSO)​

​我能干啥(What Can I Do)?​

​垂直权限管理​

​水平权限管理​


认证与授权

认证与授权是应用中最重要的两个功能点。

认证(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事先会在系统中定义不同的角色,不同的角色拥有不同的权限,一个角色实际上就是一个权限的集合。而系统的所有用户都会被分配到不同的角色中,一个用户可能拥有多个角色,角色之间有高低之分。在系统验证权限时,只需要验证用户所属的角色,然后就可以根据该角色所拥有的权限进行授权了。

在配置权限时,应当使用最小权限原则,并使用默认拒绝的策略。只对有需要的主体单独配置允许的策略。

垂直权限中容易发生的漏洞是垂直越权,即低权限用户通过修改参数获得高权限用户的权限。

水平权限管理

水平权限管理又可以称之为基于数据的访问控制。

相对于垂直权限管理来说,水平权限管理问题出在同一个角色上。系统只验证了能访问数据的角色,既没有对角色内的用户做细分,也没有对数据的子集做细分。因此缺乏一个用户到数据之间的对应关系。