具有多个私钥/公钥对的 JWT

mic*_*chf 5 java jwt spring-boot

我正在实施类似于:https : //login.microsoftonline.com/common/discovery/v2.0/keys

Spring 启动 JWT 应用程序,用于生成和验证 JWT 令牌。我将生成许多公钥/私钥(我不想用一个密钥生成所有令牌。一对密钥将生成寿命较短的令牌,第二个将生成更长的令牌......)我将使用公钥创建端点/密钥. 问题是:如何在我的应用程序中将正确的公钥与私钥连接起来进行验证?

第二个:如何生成上述密钥(使用 kty":"RSA"、"use":"sig"、kid... 等字段)是否有任何模式可以做到?

cas*_*lin 6

如何生成像上面这样的键(带有"kty": "RSA", "use": "sig", "kid"... 之类的字段)有什么模式可以做到吗?

它是一种称为 JSON Web Key (JWK) 的标准,在RFC 7517中定义,它定义了表示 JSON 中的加密密钥的数据结构。

在 Java 中,您可以使用Nimbus JOSE + JWT,它支持带有 RSA 密钥的 JWK。


如何在我的应用程序中将正确的公钥与私钥连接起来进行验证?

您可以kid在您的令牌中使用标头声明:它是一个可选的标头声明,其中包含一个密钥标识符,当您有多个密钥来签署令牌并且您需要查找正确的密钥以验证签名时特别有用。

一旦签名的 JWT 是 JWS,请考虑RFC 7515 中的定义:

4.1.4. “kid”(密钥 ID)头参数

kid(密钥ID)报头参数是指示哪些键被用于固定JWS提示。此参数允许发起者明确地向接收者发出密钥更改信号。kid未指定值的结构 。它的值必须是区分大小写的字符串。此标题参数的使用是可选的。

与 JWK 一起使用时,该kid值用于匹配 JWKkid 参数值。