1.JWT鉴权是什么?

①针对于浏览器而言

传统方式下,我们登录成功后可以将登录信息存储在session中,然后服务器会将sessionId标识返回给浏览器存储在cookie里,然后浏览器每次访问服务器的时候,都会通过cookie携带sessionId,后端通过sessionId就能取到session中的用户信息了

②针对于app/小程序而言

一个App,它是不支持cookie的;那么这种情况下,服务器如何来完成客户端的身份认定呢?这就需要JWT技术的支持了

JWT(令牌),全称为JSON Web token,是用于对应用程序上的用户进行身份验证的标记。

在身份验证过程中, 当用户使用其凭据成功登录时,将返回JWT(令牌),客户端会将其保存到本地存储中,而后每次请求都会携带此令牌。

2.JWT组成

java hutool工具包jwt令牌过期 jwt令牌储存哪里_服务器


完整的token令牌:

eyJhbGciOiJIUzI1NiJ9.eyJpZCI6MSwidXNlcm5hbWUiOiJhZG1pbiIsInRlbGVwaG9uZSI6IjEzNzAwMTM3MDAwIiwicGFzc3dvcmQiOm51bGx9.bK41N48SXyXf4lyccrAVeV-80btL5GtYZy2o5vwCX7A

①header头部

一般由两部分组成,令牌类型(即:JWT)和散列算法(HMAC、RSASSA、RSASSA-PSS等)

eyJhbGciOiJIUzI1NiJ9

去base64解码网站进行解码:

{"alg":"HS256"}
②payload载荷

一般里面可以存储自定义的实体的信息

eyJpZCI6MSwidXNlcm5hbWUiOiJhZG1pbiIsInRlbGVwaG9uZSI6IjEzNzAwMTM3MDAwIiwicGFzc3dvcmQiOm51bGx9

去base64解码网站进行解码:

{"id":1,"username":"admin","telephone":"13700137000","password":null}
③signature签名

用于保证消息在传输过程中不会被篡改,由三部分组成

  • header (base64后的)
  • payload (base64后的)
  • secret

这个部分需要base64加密后的header和base64加密后的payload使用.连接组成的字符串,然后通过header中声明的加密方式进行加盐secret组合加密,然后就构成了jwt的第三部分。

注意:secret是保存在服务器端的,jwt的签发生成也是在服务器端的,secret就是用来进行jwt的签发和jwt的验证,所以,它就是你服务端的私钥,在任何场景都不应该流露出去。一旦客户端得知这个secret, 那就意味着客户端是可以自我签发jwt了。

3.JWT流程

token必须要在每次请求时传递给服务端,它应该保存在请求头里!!!

java hutool工具包jwt令牌过期 jwt令牌储存哪里_jwt_02