3 分钟
常见 认证 (Authentication) 和 授权 (Authorization)
认证、授权、鉴权以及权限控制
术语 | 描述 | 举例 | 类比 |
---|---|---|---|
认证 identification | Client 提供一些信息,向 Server 证明 Client 是谁,Server 进行校验的过程,可以理解为登录的发起和校验阶段。(方向:Client -> Server,物料:身份证明物(用户名密码等) | a) Client 提供用户名/密码登录,服务端进行校验 b) 用户选择第三方登录,跳转到第三方进行确认后,Server 端接收到回调后和第三方进行校验。 | 提供个人信息,物业进行校验,个人信息是否有误 |
授权 authorization | Server 在认证通过后,根据 Client 提供的信息,给 Client 提供一个身份凭证,Client 接收到该凭证,进行存储。该身份凭证一般称为 Token。(方向:Server -> Client,物料:Token) | 认证成功后,Server 返回一个代表用户身份 Token 一般业界有如下几种方案 (Cookie / Session 、JWT) | 物业下发一张带有个人信息的门禁卡 |
鉴权 authentication | Client 的一些操作,必须携带 token,server 端需对 token 进行校验,只有验证通过后才能进行操作 (方向:Client -> Server,物料:Token) | Client 调用获取的个人信息的接口 | 不管做什么,进公司都要刷门禁卡,门禁需验证这张卡是不是该公司的的卡,是不是伪造的,验证通过才可以进入公司的一般区域 |
权限控制 access/permission control | Client 的对某些特殊资源的操作,还需要进行权限校验,需校验该 Token 代表的 “人” 是否有这个资源的操作权限(方向:Client -> Server,物料:Token) | 一个 BBS 系统,只有文章发布者才能修改文章内容 | 某些机密场所还要判别这张卡有没有这个场所的权限,没有权限也不允许进入,比如 CEO 办公室只有 CEO 才能进 |
认证(登录)
指的是用户输入用户凭证,登录并获取用户身份的过程。
常见的认证方式有
- HTTP Basic Authentication
- HMAC 认证
- TOTP 基于时间的认证
- 各互联网提供的非标准登录方式(手机验证码、多端认证)
授权
下发给用户一个代表其身份和权限的凭证的过程
凭证
JWT
简介
JWT,即json web token。是一种比较常用服务认证方案,是一种无状态认证方案(下文以非对称加密为例,jwt 可以使用对称加密)
核心对象及持有资源
- 签发中心(认证服务)
- 非对称秘钥(仅签发中心有,需绝对保密)
- 非对称公钥(公开可见,或API提供)
- 签发 JWT Token 的 API
- 接入的服务端(服务接入方)
- 签发中心的非对称公钥
流程
- 用户访问一个接入JWT的站点
- 前端调用签发中心RESTAPI获取JWT
- 签发中心,若发现没有登录,返回401,前端302到登录服务(一般有OATH2或CAS两种协议)
- 用户登录后,重新进入1.步
- 签发中心,若发现已登录,生成具有一定有效期的JWT Token并返回,JWT格式和生成原理如下
- JWT Token 为一个以.分割的字符串,$Header.$Payload.$Signatures
- Header 为 json 字符串的 base64 编码,包含 Signatures的签名算法信息,为明文
- Payload为 json 字符串的 base64 编码,包含用户的基本信息,为明文
- Signatures = $Header的签名算法($Header.$Payload, 签发中心非对称私钥)
- 前端请求服务,并带上JWT
- 服务端接收到JWT
- 获取签发中心的非对称公钥
- 对 Signatures 进行 验签,得到 $Header.$Payload 并与 JWT 的 $Header.$Payload 进行校验,如果验证通过,则用户身份没有被篡改
- 此时可以解析 $Payload 获取用户数据即可
OAUTH2 和 CAS
参见,单点登录