首页 > 解决方案 > 具有多个私钥/公钥对的 JWT

问题描述

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

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

第二个:如何生成像上面这样的密钥(使用 kty":"RSA","use":"sig", child...等字段)有什么模式可以做到吗?

标签: javaspring-bootjwt

解决方案


如何生成像上面这样的键(使用 "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(key ID) Header Parameter 是指示用于保护 JWS 的密钥的提示。此参数允许发起者明确地向接收者发出密钥更改的信号。该 kid值的结构未指定。它的值必须是区分大小写的字符串。此标头参数的使用是可选的。

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


推荐阅读