一、token的组成
一个token
分3部分,按顺序为
1.头部(header
)
头部承载两部分信息:
1.1声明类型,这里是Jwt
1.2声明加密的算法 通常直接使用 HMAC SHA256
2.载荷(payload)
2.1标准中注册的声明的数据;
iss: jwt签发者
sub: jwt所面向的用户
aud: 接收jwt的一方
exp: jwt的过期时间,这个过期时间必须要大于签发时间
nbf: 定义在什么时间之前,该jwt都是不可用的.
iat: jwt的签发时间
jti: jwt的唯一身份标识,主要用来作为一次性token,从而回避重放攻击。
2.2自定义数据。 key-value
3.签证(signature
)
base64
加密后的header
和base64
加密后的payload
连接组成的字符串,然后通过header
中声明的加密方式进行加盐secret
组合加密,然后就构成了Jwt
的第三部分。
header.payload.signature 三部分之间由.分隔
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhdWQiOiIxYzdiY2IzMS02ODFlLTRlZGYtYmU3Yy0wOTlkODAzM2VkY2UiLCJleHAiOjE1Njk3Mjc4OTF9.wweMzyB3tSQK34Jmez36MmC5xpUh15Ni3vOV_SGCzJ8
JWTString=Base64(Header).Base64(Payload).HMACSHA256(base64UrlEncode(header)+"."+base64UrlEncode(payload),secret)
二. 在spring_security中的应用
2.1 认证通过,使用user的id生成一个jwt 调用createJWT时候仅需要传id、【过期时间】
把jwt响应给前端
2.2 JwtAuthenticationTokenFilter 过滤器
三.前端发请求携带token