028.[转] 认证、受权、鉴权和权限控制

认证、受权、鉴权和权限控制

html

web

 

目录后端

  • 1. 认证
  • 2. 受权
  • 3. 鉴权
  • 4. 权限控制
  • 5. 认证、受权、鉴权和权限控制的关系
  • 6. 认证和鉴权的关系
  • 7. 小结
  • 8. 参考文献

本文将对信息安全领域中认证、受权、鉴权和权限控制这四个概念给出相应的定义,并对这个概念之间的相互关系进行梳理。本文给出的概念定义将有助于后续文章中对互联网应用开发用户登陆功能的更多讨论。浏览器

注:本文讨论的互联网应用开发,主要是指web应用和移动应用的开发。安全

1. 认证

认证是指根据声明者所特有的识别信息,确认声明者的身份。认证在英文中对应于identification这个单词。服务器

最多见的认证明现方式是经过用户名和密码,但认证方式不限于此。下面都是当前常见到的认证技术,cookie

  • 身份证
  • 用户名和密码
  • 用户手机:手机短信、手机二维码扫描、手势密码
  • 用户的电子邮箱
  • 基于时间序列和用户相关的一次性口令
  • 用户的生物学特征:指纹、语音、眼睛虹膜
  • 用户的大数据识别
  • 等等

为了确认用户的身份,防止伪造,在安全要求高的场合,常常会使用组合认证(或者叫多因素认证),也就是同时使用多个认证方式对用户的身份进行校验。session

2. 受权

简单来讲,受权通常是指获取用户的委派权限。在英文中对应于authorization这个单词。ide

在信息安全领域,受权是指资源全部者委派执行者,赋予执行者指定范围的资源操做权限,以便执行者代理执行对资源的相关操做。这里面包含有以下四个重要概念,post

  • 资源全部者,拥有资源的全部权利,通常就是资源的拥有者。
  • 资源执行者,被委派去执行资源的相关操做。
  • 操做权限,能够对资源进行的某种操做。
  • 资源,有价值的信息或数据等,受到安全保护。

须要说明的是,资源全部者和执行者能够是天然人,就是普通用户,但不限于天然人。在信息安全领域,资源全部者和执行者,不少时候是应用程序或者机器。好比用户在浏览器上登陆一个网站,那么这个浏览器就成为一个执行者,它在用户登陆后获取了用户的受权,表明着用户执行各类指令,进行购物、下单、付钱、转帐等等操做。

同时,资源全部者和执行者能够是分开的不一样实体,也能够是同一个。如果分开的二者,则资源执行者是以资源全部者的代理形式而存在。

受权的实现方式很是多也很普遍,咱们常见的银行卡、门禁卡、钥匙、公证书,这些都是现实生活中受权的实现方式。其实现方式主要经过一个共信的媒介完成,这个媒介不可被篡改,不可随意伪造,不少时候须要受保护,防止被窃取。

在互联网应用开发领域,受权所用到的授信媒介主要包括以下几种,

  • 经过web服务器的session机制,一个访问会话保持着用户的受权信息
  • 经过web浏览器的cookie机制,一个网站的cookie保持着用户的受权信息
  • 颁发受权令牌(token),一个合法有效的令牌中保持着用户的受权信息

前面二者常见于web开发,须要有浏览器的支持。

3. 鉴权

鉴权是指对于一个声明者所声明的身份权利,对其所声明的真实性进行鉴别确认的过程。在英文中对应于authentication这个单词。

鉴权主要是对声明者所声明的真实性进行校验。若从受权出发,则会更加容易理解鉴权。受权和鉴权是两个上下游相匹配的关系,先受权,后鉴权。受权和鉴权两个词中的“权”,是同一个概念,就是所委派的权利,在实现上即为授信媒介的表达形式。

所以,鉴权的实现方式是和受权方式有一一对应关系。对受权所颁发授信媒介进行解析,确认其真实性。下面是鉴权的一些实现方式,

  • 门禁卡:经过门禁卡识别器
  • 钥匙:经过相匹配的锁
  • 银行卡:经过银行卡识别器
  • 互联网web开发领域的session/cookie/token:校验session/cookie/token的合法性和有效性

鉴权是一个承上启下的一个环节,上游它接受受权的输出,校验其真实性后,而后获取权限(permission),这个将会为下一步的权限控制作好准备。

4. 权限控制

权限控制是指对可执行的各类操做组合配置为权限列表,而后根据执行者的权限,若其操做在权限范围内,则容许执行,不然禁止。权限控制在英文中对应于access/permission control。

对于权限控制,能够分为两部分进行理解:一个是权限,另外一个是控制。权限是抽象的逻辑概念,而控制是具体的实现方式。

先看权限(Permission),这是一个抽象的概念,通常预先定义和配置好,以便控制的具体实现。权限的定义,若简单点,能够直接对应于一个可执行的操做集合。而通常状况下,会有基于角色的方式来定义权限,由角色来封装可执行的操做集合。

若以门禁卡的权限实现为例,上述两种定义方式则能够各自表达为,

  • 这是一个门禁卡,拥有开公司全部的门的权限
  • 这是一个门禁卡,拥有管理员角色的权限,于是能够开公司全部的门

能够看到,权限做为一个抽象的概念,将执行者和可具体执行的操做相分离。

在上文的讨论中,鉴权的输出是权限(Permission)。一旦有了权限,便知道了可执行的操做,接下来就是控制的事情了。

对于控制,是根据执行者的权限,对其所执行的操做进行判断,决定容许或禁止当前操做的执行。现实生活中控制的实现方式,多种多样,

  • 门禁:控制门的开关
  • 自行车锁:控制车轮
  • 互联网web后端服务:控制接口访问,容许或拒绝访问请求

5. 认证、受权、鉴权和权限控制的关系

认证、受权、鉴权和权限控制这四个环节是一个先后依次发生、上下游的关系,

认证-->受权-->鉴权-->权限控制

须要说明的是,这四个环节在有些时候会同时发生。 例如在下面的几个场景,

  • 使用门禁卡开门:认证、受权、鉴权、权限控制四个环节一鼓作气,在瞬间同时发生
  • 用户的网站登陆:用户在使用用户名和密码进行登陆时,认证和受权两个环节一同完成,而鉴权和权限控制则发生在后续的请求访问中,好比在选购物品或支付时。

不管怎样,若从时间顺序方面来看,这四个环节是按时间先后、依次相继发生的关系

6. 认证和鉴权的关系

这两个概念在不少时候是被混淆最多的概念。被混淆的主要缘由,如上文所述,不少时候认证、受权、鉴权和权限控制一同发生,以致于被误解为,认证就是鉴权,鉴权就是认证。

其实二者是不同的概念,二者都有对身份的确认过程,可是二者的主要区别在于,

  • 认证是确认声明者的自己身份,其做为受权的上游衔接而存在
  • 鉴权是对声明者所声明的真实性进行确认的过程,其做为受权的下游衔接而存在

7. 小结

下面对本文讨论的四个概念用一个表格进行小结,

  定义 英文 实现方式
认证 确认声明者的身份 identification 根据声明者独特的识别信息
受权 获取用户的委派权限 authorization 颁发一个授信媒介,不可被篡改,不可伪造,受保护
鉴权 对所声明的权限真实性进行鉴别的过程权限是一个抽象的逻辑概念,定义和配置可执行的操做,而控制是具体的实现方式,经过必定的方式控制操做的容许和禁止 authentication 鉴权和受权是一一对应关系,解析授信媒介,确认其合法性、有效性
权限控制 权限是一个抽象的逻辑概念,定义和配置可执行的操做,而控制是具体的实现方式,经过必定的方式控制操做的容许和禁止 access/permission control 实现方式多样,根据具体状况来实现。

8. 参考文献

  1. 维基百科wiki - Identification
  2. 维基百科wiki - Authorization
  3. 维基百科wiki - Authentication
  4. 维基百科wiki – Access Control

 

《认证、受权、鉴权和权限控制》有2个想法

  1. Shane Hou说道:

    受权Authorization和权限控制Permission Control不是一样的东西吗?若是受权的时候已经有资源执行方和持有方参与,那这一步就应该要作权限控制了吧?

    好比我做为游客想要在你的博客上添加一篇博文,个人浏览器向你的博客系统发送认证信息,你的博客系统进行鉴权,确认我是个游客,接下来判断我要作的操做是添加一篇博文,可是因为权限控制,我不能添加,所以拒绝。

    按个人理解,你说的这个流程应该应用于相似OAuth的第三方登陆场景,好比你的博客要获取个人Github数据,所以要先跳转至Github让我点赞成,这一步是我(资源持有者)对你的博客系统的受权。

    1. pphh说道:

      从过程上,受权和权限控制是能够分开的两个阶段,得到了受权并不必定就可以成功执行所得到权限容许的操做,好比说受权超时,虽然权限已颁发,可是若超时了就会变得无效,这个判断是由权限控制来决定。权限控制是比较灵活的阶段,除了根据客户端发过来的受权信息,还能够根据其它条件判断是否能够执行相应的操做,好比登陆的IP地址是否安全、是否长时间未登陆、是否在执行大风险的操做,如有风险的话,能够进行追加鉴权操做,肯定该操做确实是由用户所委派,等等

      这是一个一般的受权和权限控制流程,不只仅在OAuth,并且普通的用户登陆、移动支付等场景也是如此。

      你给的博客登陆例子中,当认证你为游客后,浏览器中会保存你做为游客的受权记录,在浏览器中执行的全部后续操做都会按照游客的权限进行控制,这个控制其实发生在认证受权以后,而且在博客后端服务器所实现。

      你说的“权限控制”(即在受权时游客角色的肯定),其实只是逻辑权限的颁发,仍是属于受权,真正的控制发生在后续操做时是否被拦截或被容许。