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

时间:2018-07-06 08:44:04

标签: java spring-boot jwt

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

的功能

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

第二个:如何生成上述密钥(具有kty“:” RSA“,” use“:” sig“,kid等字段)是否有任何模式可实现?

1 个答案:

答案 0 :(得分:2)

  

如何生成上面的键(具有"kty": "RSA""use": "sig""kid" ...这样的字段)

这是RFC 7517中定义的称为JSON Web密钥(JWK)的标准,该标准定义了表示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   参数值。