认证、授权、鉴权以及权限控制

博客 知乎文章

术语描述举例类比
认证 identificationClient 提供一些信息,向 Server 证明 Client 是谁,Server 进行校验的过程,可以理解为登录的发起和校验阶段。(方向:Client -> Server,物料:身份证明物(用户名密码等)a) Client 提供用户名/密码登录,服务端进行校验 b) 用户选择第三方登录,跳转到第三方进行确认后,Server 端接收到回调后和第三方进行校验。提供个人信息,物业进行校验,个人信息是否有误
授权 authorizationServer 在认证通过后,根据 Client 提供的信息,给 Client 提供一个身份凭证,Client 接收到该凭证,进行存储。该身份凭证一般称为 Token。(方向:Server -> Client,物料:Token)认证成功后,Server 返回一个代表用户身份 Token 一般业界有如下几种方案 (Cookie / Session 、JWT)物业下发一张带有个人信息的门禁卡
鉴权 authenticationClient 的一些操作,必须携带 token,server 端需对 token 进行校验,只有验证通过后才能进行操作 (方向:Client -> Server,物料:Token)Client 调用获取的个人信息的接口不管做什么,进公司都要刷门禁卡,门禁需验证这张卡是不是该公司的的卡,是不是伪造的,验证通过才可以进入公司的一般区域
权限控制 access/permission controlClient 的对某些特殊资源的操作,还需要进行权限校验,需校验该 Token 代表的 “人” 是否有这个资源的操作权限(方向:Client -> Server,物料:Token)一个 BBS 系统,只有文章发布者才能修改文章内容某些机密场所还要判别这张卡有没有这个场所的权限,没有权限也不允许进入,比如 CEO 办公室只有 CEO 才能进

认证(登录)

指的是用户输入用户凭证,登录并获取用户身份的过程。

常见的认证方式有

  • HTTP Basic Authentication
  • HMAC 认证
  • TOTP 基于时间的认证
  • 各互联网提供的非标准登录方式(手机验证码、多端认证)

授权

下发给用户一个代表其身份和权限的凭证的过程

凭证

JWT

简介

JWT,即json web token。是一种比较常用服务认证方案,是一种无状态认证方案(下文以非对称加密为例,jwt 可以使用对称加密)

核心对象及持有资源

  • 签发中心(认证服务)
    • 非对称秘钥(仅签发中心有,需绝对保密)
    • 非对称公钥(公开可见,或API提供)
    • 签发 JWT Token 的 API
  • 接入的服务端(服务接入方)
    • 签发中心的非对称公钥

流程

  1. 用户访问一个接入JWT的站点
  2. 前端调用签发中心RESTAPI获取JWT
    1. 签发中心,若发现没有登录,返回401,前端302到登录服务(一般有OATH2或CAS两种协议)
    2. 用户登录后,重新进入1.步
  3. 签发中心,若发现已登录,生成具有一定有效期的JWT Token并返回,JWT格式和生成原理如下
    1. JWT Token 为一个以.分割的字符串,$Header.$Payload.$Signatures
    2. Header 为 json 字符串的 base64 编码,包含 Signatures的签名算法信息,为明文
    3. Payload为 json 字符串的 base64 编码,包含用户的基本信息,为明文
    4. Signatures = $Header的签名算法($Header.$Payload, 签发中心非对称私钥)
  4. 前端请求服务,并带上JWT
  5. 服务端接收到JWT
    1. 获取签发中心的非对称公钥
    2. 对 Signatures 进行 验签,得到 $Header.$Payload 并与 JWT 的 $Header.$Payload 进行校验,如果验证通过,则用户身份没有被篡改
    3. 此时可以解析 $Payload 获取用户数据即可

OAUTH2 和 CAS

参见,单点登录