JWT 鉴权机制
概念
JWT(JSON Web Token)是一种开放标准(RFC 7519),用于在网络应用间传递信息的一种方式。它是一种基于JSON的轻量级、自包含的安全令牌,用于在客户端和服务器之间进行身份验证和授权。
JWT由三部分组成:头部(Header)、载荷(Payload)和签名(Signature)。
-
头部(Header):描述JWT的元数据和签名算法。
-
{ "alg": "HS256", "type": "JWT" }
alg
: 声明算法类型
因为 JWT 是字符串,还需要对 JWT 进行 base64 编码,最终为一串字符串:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
-
-
载荷(Payload):包含要传递的信息,如用户身份、权限等。
-
载荷即消息体, 这里会存放实际的内容, 也就是 token 的数据声明 ,例如用户的 id 和 name,默认情况下也会携带令牌的签发时间 iat,还可以设置过期时间
{ "sub": "1234567890", "name": "John Doe", "iat": 1516239022 }
同样会进行 base64 编码,生成字符串:
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ
-
-
签名(Signature):使用密钥对头部和载荷进行签名,用于验证JWT的真实性和完整性。
- 公式:
Signature = HMACSHA256(base64Url(header)+.+base64Url(payload),secretKey)
- 一旦前面两部分数据被篡改,只要服务器加密用的密钥没有泄露,得到的签名肯定和之前的签名不 一致。
- 公式:
About 25 min