首页 文章

JWT令人困惑 . 应用程序服务器如何进行身份验证?

提问于
浏览
1

JWT上的This article除了最后一部分外是非常明确的 .

我理解的部分:1 . 编码是加密的差异 . 2.令牌的部分(头base64编码,有效载荷base64编码,签名哪个头部有效载荷用公钥和指定的算法加密)

但我不明白第5部分中如何处理令牌验证 . 我也不明白为什么头和有效负载需要进行Base64编码 . 鉴于它不安全或加密......编码的一部分是什么?

*编辑

我是否正确理解由于JWT包含 encoded 标头和有效负载......应用服务器可以只使用其密钥(可能是非对称加密机制中的公钥)来加密包含的有效负载和报头,如果它到达同样包括JWT签名......然后应用服务器知道数据没有被篡改,并且用户确实通过认证服务器进行了认证 . 这是正确的吗?

如果签名不匹配 . 这意味着什么?

1 回答

  • 4

    JWT 使用 base64Url 编码(参见https://tools.ietf.org/html/rfc7519#section-3),它避免使用字符 +/,= 作为URI的保留字符(参见2.2 . 在https://www.ietf.org/rfc/rfc2396.txt中)
    这是有道理的,因为在某些情况下,令牌作为参数在URL中传输 .

    如果使用非对称加密,则使用密钥完成加密,从而使得知道公钥的任何人都无法创建新签名 .

    本教程中的步骤5告诉您,应用程序服务器将使用与身份验证服务器相同的密钥从头和有效负载创建哈希值,并比较它是否获得与请求中收到的JWT相同的值 . 不匹配签名的含义是有人更改了令牌,因此令牌被视为无效,授权将被拒绝 . 从技术上讲,操纵 JWT 的标头和有效负载非常容易,只需解码 base64 编码的部分,更改 JSON 结构中的某些值,例如 . 到期时间 exp ,并再次编码 . 但是,如果不知道私钥,则无法为其创建有效签名 .

    检查https://jwt.o并在调试窗口中使用示例标记来查看效果 .

相关问题