java - 具有多个私钥/公钥对的 JWT
问题描述
我正在实现类似于:https ://login.microsoftonline.com/common/discovery/v2.0/keys
生成和验证 JWT 令牌的 Spring Boot JWT 应用程序。我将生成许多公钥/私钥(我不想用一个密钥生成所有令牌。一对密钥将生成寿命较短的令牌,第二对将生成更长的......)我将使用公钥创建端点/keys . 问题是:如何在我的应用程序中连接正确的公钥和私钥来验证它?
第二个:如何生成像上面这样的密钥(使用 kty":"RSA","use":"sig", child...等字段)有什么模式可以做到吗?
解决方案
如何生成像上面这样的键(使用
"kty": "RSA"
,"use": "sig"
,"kid"
... 等字段)有什么模式可以做到吗?
它是一种称为 JSON Web Key (JWK) 的标准,在RFC 7517中定义,它定义了一个表示 JSON 中的加密密钥的数据结构。
在 Java 中,您可以使用Nimbus JOSE + JWT,它支持带有 RSA 密钥的 JWK。
如何在我的应用程序中将正确的公钥与私钥连接起来进行验证?
您可以kid
在令牌中使用标头声明:这是一个可选的标头声明,其中包含一个密钥标识符,当您有多个密钥来签署令牌并且您需要查找正确的密钥来验证签名时特别有用。
一旦签名的 JWT 是 JWS,请考虑RFC 7515中的定义:
kid
(key ID) Header Parameter 是指示用于保护 JWS 的密钥的提示。此参数允许发起者明确地向接收者发出密钥更改的信号。该kid
值的结构未指定。它的值必须是区分大小写的字符串。此标头参数的使用是可选的。与 JWK 一起使用时,该
kid
值用于匹配 JWKkid
参数值。
推荐阅读
- c++ - 使用基类的通用消息调度,如何(或应该)避免 dynamic_cast
- go - 如何使用 GCP 在 pubsub 模型中一次向所有订阅者发送消息
- function - React Native 无状态函数在导入时不渲染
- python - 如何一次以多种方式对 csv 文件进行排序?
- node.js - 在 WSL2 Ubuntu 上安装 npm
- canvas - 为什么paper.js path.onFrame从函数更改为null时不会停止
- sql - 如何使用模糊匹配删除部分字符串?
- mysql - Eloquent 的 where/orWhere 组合失败
- javascript - 关闭 CSS 全屏菜单 onclick
- java - 如何在 GridLayout 中创建水平 JLabels?