除了最后一部分,有关JWT的这篇文章非常清晰。
我了解的部分:1.编码与加密有所不同。2.令牌的组成部分(标头base64编码,有效载荷base64编码,签名,标头+有效负载使用公钥和指定的算法加密)
但是我不了解第5部分中如何处理令牌验证。我也不了解为什么报头和有效负载需要进行Base64编码。鉴于它既不安全也不加密...编码的一部分是什么?
***** 编辑 ****
我的理解是否正确,因为JWT包含编码的标头和有效负载...应用服务器可以仅使用其秘密密钥(也许是非对称加密机制中的公共密钥)来加密所包含的有效载荷和标头,以及是否到达包含相同的JWT签名...,那么应用程序服务器知道数据未被篡改,并且用户确实已通过身份验证服务器进行身份验证。这是正确的吗?
如果签名不匹配。这意味着什么?
JWT使用base64Url编码(请参阅https://tools.ietf.org/html/rfc7519#section-3),该编码避免使用字符+,/并且=是URI的保留字符(请参阅https://www.ietf.org中的 2.2节。/rfc/rfc2396.txt),
这是有道理的,因为在某些情况下,令牌是作为url中的参数进行传输的。
如果使用非对称算法,则使用私钥进行哈希处理,从而使知道公钥的任何人都无法创建新签名。
本教程的第5步仅告诉您,应用程序服务器将使用与身份验证服务器相同的密钥从标头和有效负载创建哈希,并比较它是否获得与在请求中收到的JWT中相同的值。不匹配签名的含义是有人更改了令牌,因此该令牌被视为无效,并且授权将被拒绝。从技术上讲,操作a的标头和有效负载非常容易JWT,只需解码base64url编码部分,更改JSON结构中的某些值即可。到期时间exp,然后重新编码。但是在不知道私钥的情况下,您无法为其创建有效的签名。
查看https://jwt.o并在调试窗口中使用示例令牌查看效果。
| 归档时间: |
|
| 查看次数: |
454 次 |
| 最近记录: |