开篇
实现 Token 的方式有很多,本篇介绍的是利用 JSON Web Token(JWT)生成的 Token.JWT 生成的 Token 有什么好处呢?
安全性比较高,加上密匙加密而且支持多种算法。
携带的信息是自定义的,而且可以做到验证 token 是否过期。
验证信息可以由前端保存,后端不需要为保存 token 消耗内存。
本篇分 3 部分进行讲解。
什么是 JWT
JWT 的代码实现
用 HS256 对称算法加密
用 RS256 非对称算法加密
总结
如果原理很难懂,没关系。可以直接看 JWT 的代码实现。代码已经上传 github。已经对代码进行封装成工具类。可以直接使用。
什么是 JWT
JSON Web Token 简称 JWT。
一个 JWT 实际上就是一个字符串,它由三部分组成,头部、载荷 与 签名。
JWT 生成的 token 是这样的
eyJpc3MiOiJKb2huI.eyJpc3MiOiJ.Kb2huIFd1IEp
生成的 token,是 3 段,用 . 连接。下面有解释。
头部
用于描述关于该 JWT 的最基本的信息,例如其类型以及签名所用的算法等。这也可以被表示成一个 JSON 对象。
例如:
{
"typ": "JWT",
"alg": "HS256"
}
载荷
其实就是自定义的数据,一般存储用户 Id,过期时间等信息。也就是 JWT 的核心所在,因为这些数据就是使后端知道此 token 是哪个用户已经登录的凭证。而且这些数据是存在 token 里面的,由前端携带,所以后端几乎不需要保存任何数据。
例如:
{
"uid": "xxxxidid", //用户id
"exp": "12121212" //过期时间
}
签名
签名其实就是:
1.头部和载荷 各自base64加密后用.连接起来,然后就形成了 xxx.xx 的前两段 token。
2.最后一段 token 的形成是,前两段加入一个密匙用 HS256 算法或者其他算法加密形成。
3. 所以 token3 段的形成就是在签名处形成的。
代码实现
1.看代码前一定要知道 JWT 是由 头部、载荷 与 签名 组成。
2.代码已上传 github,希望点个赞
3. 代码将 JWT 封装成两个工具类,可以直接调用。
需要下载的 jar 包
com.nimbusds
nimbus-jose-jwt
6.0
HS256 对称加密