我正在实现类似于https://login.microsoftonline.com/common/discovery/v2.0/keys
的功能Spring boot JWT应用程序,用于生成和验证JWT令牌。 我将生成许多公钥/私钥(我不想用一个密钥生成所有令牌。一对密钥将生成寿命较短的令牌,第二对将生成较长的令牌...) 我将使用公共密钥创建端点/密钥。问题是:如何在我的应用程序中连接正确的公钥和私钥以进行验证?
第二个:如何生成上述密钥(具有kty“:” RSA“,” use“:” sig“,kid等字段)是否有任何模式可实现?
答案 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
值用于匹配JWKkid
参数值。