JWT使用多个私钥/公钥对

7
我正在实现类似于以下内容的东西:https://login.microsoftonline.com/common/discovery/v2.0/keys,这是一个基于Spring Boot的JWT应用程序,它会生成并验证JWT令牌。我会生成许多公钥/私钥对(我不想使用一个密钥生成所有令牌。一个密钥对将生成具有较短生命周期的令牌,第二个将生成具有更长生命周期的令牌...),我将使用端点/keys来共享公钥。问题是:如何在我的应用程序中连接正确的公钥和私钥来进行验证?其次:如何像上面那样生成具有字段kty":"RSA","use":"sig", kid等的密钥?有没有什么模式可供使用?
1个回答

10
我如何生成像上面那样的密钥(具有诸如"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" (Key ID) Header Parameter

kid(密钥 ID)头参数是一个提示,指示用于保护JWS的密钥。此参数允许发起者向接收者明确地发出密钥更改信号。 kid 值的结构未指定。其值必须是区分大小写的字符串。使用此头参数是可选的。

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


非常感谢您的精确回复!在服务器上存储密钥的最佳实践是什么?我不必将其放在远程存储库中。 - michf
谢谢,现在我知道如何安全地存储文件了。但是我不确定如何确切地存储密钥。我的想法是使用keygen、openssl或类似工具生成一些密钥对。这样,我将拥有一个包含一些条目的文件:1. 条目类型:PrivateKeyEntry,证书链长度:3。证书[1]:所有者:owner,颁发者:issuer...等等。那么如何存储它呢?编码为base64并存储在txt文件中? - michf
@michf 这已经超出了原问题的范围,请提出一个新问题。 - cassiomolin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接