1.什么是token
现在可以说,JSON Web Token(缩写 JWT)是目前最流行的跨域认证解决方案。
它将用户信息加密到token里,服务器不保存任何用户信息。服务器通过使用保存的密钥验证token的正确性,只要正确即通过验证。
在分布式系统中,很好地解决了单点登录问题,很容易解决了session共享的问题。
缺点是无法作废已颁布的令牌/不易应对数据过期。
英文网址如下:https://jwt.io/introduction/
2.token的优势
优势
Token相对于Cookie/Session的
支持跨域访问: Cookie是不允许垮域访问的,token支持
无状态: token无状态,session有状态的
去耦: 不需要绑定到一个特定的身份验证方案。Token可以在任何地方生成,只要在 你的API被调用的时候, 你可以进行Token生成调用即可.
更适用于移动应用: Cookie不支持手机端访问的
性能: 在网络传输的过程中,性能更好
基于标准化: 你的API可以采用标准化的 JSON Web Token (JWT).
劣势
- 占带宽
正常情况下要比 session_id 更大,需要消耗更多流量,挤占更多带宽,假如你的网站每月有 10 万次的浏览器,就意味着要多开销几十兆的流量。听起来并不多,但日积月累也是不小一笔开销。实际上,许多人会在 JWT 中存储的信息会更多。 - 无法在服务端注销,那么久很难解决劫持问题。
- 更多的CPU开销,省下了内存容量的同时,增加了CPU的验证开销。
3. token怎么用
token的用法思路很简单,这也是它很棒的一点。
用户登陆的时候,我们生成一个token,放在返回里给到登陆用户。
用户查询其他资源的请求过来时,带着token一起过来,然后我们再验证token。
怎么生成token
首先在pom.xml里引入java-jwt
<!-- https://mvnrepository.com/artifact/com.auth0/java-jwt -->
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>3.10.0<