CAS - Central Authentication Server
CAS 全称 Central Authentication Server,也称作中央认证服务,是支持 JWT 的。
其分为两个部分:CAS 服务端(CAS Server) 和 CAS 客户端(CAS Client)。服务端负责认证工作,独立部署;客户端负责处理访问请求,需要登录时,重定向到服务端。
认证流程
- 浏览器向客户端请求提供某个受保护的资源。
- 重定向到服务端进行认证
- 用户进行身份认证
- 服务端生成票据
- 客户端向服务端验证票据
- 验证成功返回用户信息
JWT - JSON Web Token
JWT 是一种用于在两方之间安全地表示声明的方法,是 token 思想的一种实现方式。
组成部分
本质上就是一个字符串,但是其带有签名信息,接收后可以校验是否正确或是否被篡改等。JWT 组成分为三个部分,每个部分用点号连接,像是这样:
HEADER.PAYLOAD.SIGNATURE
- HEADER:用于声明 算法 和 token 类型,alg 表明算法是 HS256,typ 表明类型是 JWT,如下:
{
"alg": "HS256",
"typ": "JWT"
}
- PAYLOAD:存放所需传递的数据,有默认字段也可以自定义私有字段(这是未加密的,仅进行了编码,只能传递非敏感的信息),如下:
{
// 自带的默认字段
"iss": "发行人",
"exp": "到期时间",
"sub": "主题",
"aud": "用户",
"nbf": "在此之前不可用",
"iat": "发布时间",
"jti": "ID用于标识JWT",
// 自定义的字段
"name": "Tom",
"admin": true
}
- VERIFY SIGNATURE:结构如下,将 HEADER 、PAYLOAD 、secret密钥 三个部分分别进行 base64UrlEncode 的操作(secret 可以不 encode),然后使用自己所选的算法(在 HEADER 中指定)进行计算,得出的结果便是此部分的内容。
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload) + "." +
secret 或者 base64UrlEncode(secret)
)
认证流程
- 客户端(浏览器)向服务端发送账号密码请求登录
- 服务端校验账号密码并生成 JWT Token 将其返回
- 客户端(浏览器)保存 JWT Token,下次需要请求时将其携带
- 服务端校验 JWT Token 信息(像 VERIFY SIGNATURE 部分一样进行相同操作,取出 header 和 payload 并加上 secret 一同进行 encode,然后比对此部分是否一致),然后验证有效性、是否过期等等,通过后返回业务数据
- 客户端(浏览器)收到业务数据,进行处理并使用
