为啥 JWT Token 包含用于加密/签名的算法

Posted

技术标签:

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

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

【问题讨论】:

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

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

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

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

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

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

【讨论】:

以上是关于为啥 JWT Token 包含用于加密/签名的算法的主要内容,如果未能解决你的问题,请参考以下文章

深入浅出JWT(JSON Web Token )

深入浅出JWT(JSON Web Token )

JWT——json web token

为啥 JSON Web Token (JWT) 在不知道密钥的情况下解密

token 加密解密

jwt 认证