一、JWT是什么
JSON Web Token
(JWT
) 定义了一种紧凑且自包含的方式,用于在各方之间作为 JSON 对象安全地传输信息。该信息可以被验证和信任,因为它是经过数字签名的。JWT
可以设置有效期。
JWT
是一个很长的字符串,包含了Header
,Playload
和Signature
三部分内容,中间用.
进行分隔。
Headers
Headers
部分描述的是JWT
的基本信息,一般会包含签名算法和令牌类型,数据如下:
{
"alg": "RS256",
"typ": "JWT"
}
Playload
Playload
就是存放有效信息的地方,JWT
规定了以下7个字段,建议但不强制使用:
iss: jwt签发者
sub: jwt所面向的用户
aud: 接收jwt的一方
exp: jwt的过期时间,这个过期时间必须要大于签发时间
nbf: 定义在什么时间之前,该jwt都是不可用的
iat: jwt的签发时间
jti: jwt的唯一身份标识,主要用来作为一次性token
除此之外,我们还可以自定义内容
{
"name":"Java旅途",
"age":18
}
Signature
Signature
是将JWT
的前面两部分进行加密后的字符串,将Headers
和Playload
进行base64
编码后使用Headers
中规定的加密算法和密钥进行加密,得到JWT
的第三部分。
二、JWT生成和解析token
在应用服务中引入JWT
的依赖
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.0</version>
</dependency>
根据JWT
的定义生成一个使用R