【问题标题】:Why send JWT token header为什么要发送 JWT 令牌标头
【发布时间】:2021-11-04 15:22:25
【问题描述】:

查看典型的 JWT 令牌,我可以看出标头主要标识了正在使用的签名方案。对于给定的 Web 应用程序,它可能只有一个签名方案,例如 HS256。所以标题只是一个base64表示:

{"typ":"JWT","alg":"HS256"}

静态内容,在客户端和服务器之间来回发送。

为什么我们需要发送一个包含三个部分header.payload.signature 的完整 JWT 令牌?根据我的测试,跳过标题并仅发送 payload.signature 部分即可完成这项工作。在大多数情况下,使用第三方 JWT 库只需要在令牌前添加一个存储的 base64 表示的标头以进行验证,从而在每次往返时节省几十个字节。

在用户-服务器通信中修剪标头是否会引起任何安全问题?我明白这违反了标准,但浏览器无论如何都不在乎。

【问题讨论】:

    标签: jwt


    【解决方案1】:

    HMAC-SHA2 - 256 位不是“alg”的唯一选项。
    如果它使用不同的算法(例如 SHA-3)进行哈希处理,您需要知道才能验证令牌。

    【讨论】:

    • 当然,它不是唯一的算法,但是一旦您为应用程序返回的访问令牌选择单一算法,整个标头就会变成静态的。客户端不做散列,也不做签名,所以基本上你控制标题里面的内容。这就是我的观点,并证明了为什么不跳过发送它的问题。
    • 我明白你的意思。所以答案是你不应该为 JWT 服务。这最好由联合服务(如 Active Directory)处理。除非您确实必须这样做,否则安全不是您想自己动手的领域。
    猜你喜欢
    • 2018-10-23
    • 2015-09-27
    • 2014-09-02
    • 2020-12-17
    • 2019-06-19
    • 2020-09-19
    • 2017-07-02
    • 2016-05-03
    相关资源
    最近更新 更多