认识JWT
JWT全称:JSON Web Token,是一种将JSON对象进行Base64URL编码加密后,在各方进行令牌传输和认证的一种机制
JWT的样式
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
JWT数据由三段构成,每一段数据使用一个点号(.)进行分割,三个数据分别是: HEADER.PAYLOAD.SIGNATURE
JWT的三段构成
Header
header 包含两个部分:令牌的算法 和 令牌类型,如:
{
"alg": "HS256",
"typ": "JWT"
}
将以上json对象使用 base64Url 编码,得到HEADER
Payload
payload 是负载,或者加有效载荷,是应用程序之间传输的真正有用的数据,如:
{
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022
}
将以上json对象使用 base64Url 编码,得到PAYLOAD
Signature
signature 是签名,是对header 和 payload 的签名,可以验证数据是否有被篡改。JWT通常使用的加密算法是HMAC SHA256
Signature 签名算法如下:
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
your-256-bit-secret
)
注意: your-256-bit-secret 是你的密匙字符串,只能是服务器知道,千万不要对外泄露。
经过以上HMACSHA256算法最后得出一串加密后的签名,得到SIGNATURE
最后
将JWT的三个部件使用点号(.)进行拼接,得到: HEADER.PAYLOAD.SIGNATURE
此刻JWT正式生成,可以返回给客户端了,以后请求的时候带着这个JWT token 就行了
其他提示
SIGNATURE 是对 HEADER 和 PAYLOAD两段的加密,主要用于防止数据篡改,客户端传输的SIGNATURE需要和服务器端计算的签名结果进行比对