JSON Web Token 缩写 (JWT),以加密后的JSON对象传输信息
应用场景
- 授权登录(SSO)
- 信息交换
构成
包含三部分,以.分割
- Header(头部)
- Payload(负载)
- Signature(签名)
常见形式:xxxxxx.yyyyyy.zzzzzz
实例
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.cThIIoDvwdueQB468K5xDc5633seEFoqwxjF_xSJyQQ
Header: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
Payload: eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ
Signature: cThIIoDvwdueQB468K5xDc5633seEFoqwxjF_xSJyQQ
字符串通过Base64解码后得到如下信息:(所以隐秘信息不能放在这里!)
Header
{
"alg": "HS256", // 加密算法
"typ": "JWT" // token 类型
}
Payload
{
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022
}
JWT规定了7个官方字段供选用
iss (issuer) : 签发人
exp (expiration time) : 过期时间
sub (subject) : 主题
aud (audience) : 受众
nbf (Not Before) : 生效时间
iat (Issued At) : 签发时间
jti (JWT ID) : 编号
开发者也可以自己指定字段和内容
Signature
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret
)
通过签名算法 HMACSHA256(Header里指定) 得到的签名字符串:
cThIIoDvwdueQB468K5xDc5633seEFoqwxjF_xSJyQQ
其中:secret 密钥由服务器指定,不能泄漏给用户
传输途径
Http 请求头配置 Authorization
Authorization: Bearer <token>
服务端获取token后可以 通过 srcret 验签比对,防止篡改