首页 > 解决方案 > 为什么 JWT Token 包含用于加密/签名的算法

问题描述

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

标签: encryptionoauthcryptographyauthorizationjwt

解决方案


首先,规范强制要求“alg”声明不仅适用于加密的 JWT (JWE),而且适用于(仅)签名的 JWT (JWS)甚至不安全的 JWS

为什么引用使用的加密算法是一个好主意的一个中心原因是 RFC 7518 定义为“加密敏捷性”

实施者应该意识到加密算法会随着时间的推移而变得更弱。随着新密码分析技术的开发和计算性能的提高,破解特定密码算法的工作因素将减少。因此,实施者和部署必须为支持和使用的算法集做好准备,这些算法会随着时间的推移而变化。因此,密码算法实现应该是模块化的,允许容易地插入新算法。

加密敏捷基本上意味着您的 Auth-Server 可以同时使用多种算法。这例如允许使用新的/不同的算法签名和/或加密的令牌的优雅推出,而不会破坏对已发布令牌的支持。

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


推荐阅读