【问题标题】:Why JWT Token contains algorithm used for encryption/signature为什么 JWT Token 包含用于加密/签名的算法
【发布时间】:2019-03-28 02:53:50
【问题描述】:

包含用于签名的算法的 JWT Token 的目的是什么?客户端不需要这些信息,服务器端应该已经知道这个算法。

【问题讨论】:

  • 假设明天在现有的加密算法中发现了一个弱点..怎么办?你如何切换到新算法?
  • 应用程序是否可以对不同的令牌使用不同的算法?在那种情况下,它怎么知道要使用什么算法,因为身份验证是无状态的,并且它不会在服务器端存储每个令牌的算法?我不确定这个用例是否存在,但这只是我能想到的。如果我错了,有人会否决我:)
  • 这个问题最好在security问。

标签: encryption oauth cryptography authorization jwt


【解决方案1】:

首先,规范要求“alg”声明不仅适用于 encrypted JWT (JWE),而且适用于(仅)signed JWT (JWS) 和 even unsecured JWS

为什么引用使用的加密算法是一个好主意的一个核心原因是 RFC 7518 定义为 "Cryptographic Agility"

实施者应该意识到加密算法变得 随着时间变弱。随着新的密码分析技术的发展和 计算性能提高,打破特定的工作因素 密码算法将减少。因此,实施者和 必须为以下算法集准备部署 支持并用于随时间变化。因此,密码学 算法实现应该是模块化的,允许新算法 很容易插入。

加密敏捷基本上意味着您的身份验证服务器可以同时使用多种算法。这例如允许优雅地推出使用新/不同算法签名和/或加密的令牌,而不会破坏对已发行令牌的支持。

由于 JWT 用于我所说的 Stateless Authentication,因此 Auth-Server 理想情况下不存储任何令牌状态。因此,使用的算法需要作为令牌元数据的一部分存储在其标头中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-20
    • 2016-11-17
    • 2020-12-15
    • 2017-01-24
    • 2018-12-21
    • 2019-01-02
    • 2017-02-27
    • 2021-11-06
    相关资源
    最近更新 更多