0


服务器验证JWT_token的过程

Json Web Toke(JWT)是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准RFC7519。

一、先讲加密:

​ 众所周知,JWT token 由三部分组成:

Header.Payload.Signature

,其中 Signature 的加密形式为:

HMACSHA256(
  base64UrlEncode(Header) + "." 
  + base64UrlEncode(Payload),
  secret_key)

由上面可以知道,Signature 的加密方式为

哈希算法

,其过程不可逆,也就是说加密后就不可逆,Signature 本身为一串哈希值。(注意:secret_key 作为本次哈希加密的盐值,只存在于各大服务器中,不可泄露)

RFC 7518 - JSON Web Algorithms (JWA) 中给出的 JWT 算法列表如下:

+--------------+-------------------------------+--------------------+
|"alg" Param  | Digital Signature or MAC      | Implementation     || Value        | Algorithm                     | Requirements       |
+--------------+-------------------------------+--------------------+
| HS256        | HMAC using SHA-256            | Required           || HS384        | HMAC using SHA-384            | Optional           || HS512        | HMAC using SHA-512            | Optional           || RS256        | RSASSA-PKCS1-v1_5 using       | Recommended        ||| SHA-256                       ||| RS384        | RSASSA-PKCS1-v1_5 using       | Optional           ||| SHA-384                       ||| RS512        | RSASSA-PKCS1-v1_5 using       | Optional           ||| SHA-512                       ||| ES256        | ECDSA using P-256 and SHA-256 | Recommended+       || ES384        | ECDSA using P-384 and SHA-384 | Optional           || ES512        | ECDSA using P-521 and SHA-512 | Optional           || PS256        | RSASSA-PSS using SHA-256 and  | Optional           ||| MGF1 with SHA-256             ||| PS384        | RSASSA-PSS using SHA-384 and  | Optional           ||| MGF1 with SHA-384             ||| PS512        | RSASSA-PSS using SHA-512 and  | Optional           ||| MGF1 with SHA-512             ||| none         | No digital signature or MAC   | Optional           ||| performed                     ||
+--------------+-------------------------------+--------------------+

二、验证过程

​ 服务器在接收到 token 后,会将

Header.Payload

先提取出来,然后按照之前加密的方式一样,对其进行哈希运算,最终得到一串新的哈希值。

# 这里的加密方式与原先一样
HMACSHA256(
  base64UrlEncode(Header) + "." 
  + base64UrlEncode(Payload),
  secret_key)

服务器将新的哈希值与请求携带过来的

Signature

进行比较,如果一模一样则认证成功;不一样则认证失败。

三、总结

最后总结一下,这种验证方式最主要的安全措施就是把哈希运算的盐值

secret_key

始终保存在各大服务器中,并不对外公布。
但是如果盐值泄露则会造成不可挽回的损失,即其他人也可以拿着盐值对任意用户进行签名,伪造登录。那么如何才能避免这种情况呢?请看我的下一篇博客:使用非对称加密加强JWT验证


本文转载自: https://blog.csdn.net/qq_35760825/article/details/129028556
版权归原作者 ThinkStu 所有, 如有侵权,请联系我们删除。

“服务器验证JWT_token的过程”的评论:

还没有评论