Skip to content

简介

认证(identification)

通俗地讲就是 验证当前用户的身份,证明 "你是你自己" (比如: 你每天上下班打开,都需要通过指纹打卡,当你的指纹和系统里录入的指纹相匹配时,就打卡成功)

互联网中的认证:

  • 用户名密码登录
  • 邮箱发送登录链接
  • 手机号接受验证码
  • 手机二维码扫描
  • 只要你能收到邮箱邮件或者手机能收到验证码,就默认你是账号的主人

为了确认用户的身份,防止伪造,在安全要求高的场合,经常会使用组合认证(或者叫多因素认证),也就是同时使用多个认证方式对用户的身份进行验证,例如某些网站或者 App 需要同时提供手机验证码和邮箱验证码才能登录

授权(Authorization)

简单来说,授权一般是指获取用户的委派权限。

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

  • 资源所有者,拥有资源的所有权利,一般就是资源的拥有者
  • 资源执行者,被委派去执行资源的相关操作
  • 操作权限,可以对资源进行的某种操作
  • 资源,有价值的信息或数据等,受到安全保护

需要说明的是,资源所有者和执行者可以是自然人,就是普通用户,但不限于自然人。
在信息安全领域,资源所有者和执行者,很多时候是应用程序或者机器。
比如用户在浏览器上登录一个网站,那么这个浏览器就称为一个执行者,它在用户登录后获取了用户的授权,代表着用户执行各种指令,进行购物、下单、付钱、转账等等操作

同时,资源所有者和执行者可以是分开的不同实体,也可以是同一个。
若是分开的两者,则资源执行者是以资源所有者的代理形式而存在

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

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

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

前面两者常见于 web 开发,需要有浏览器的支持

鉴权(authentication)

鉴权是指对于一个声明者所声明的身份权利,对其声明的真实性进行鉴别确认的过程。

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

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

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

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

认证、授权、鉴权和权限控制的关系

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

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

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

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

无论怎样,若从时间顺序方面来看,这四个环节时按时间前后、以此相继发生的关系

认证和鉴权的关系

这两个概念在很多时候是被混淆最多的概念。
被混淆的主要原因,如上文所述,很多时候认证、授权、鉴权和权限控制一同发生,以至于被误解为,认证就是鉴权,鉴权就是认证

其实两者是不一样的概念,两者都有对身份的确认过程,但是两者的主要区别在于

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