Как сгенерировать ключи, как указано выше (с такими полями, как "kty": "RSA"
, "use": "sig"
, "kid"
...) Есть ли способ сделать это?
Это стандарт, называемый JSON Web Key (JWK), определенный в RFC 7517 , который определяет структуру данных, которая представляет криптографический ключ в JSON.
В Java вы можете использовать Nimbus JOSE + JWT , который поддерживает JWK с ключами RSA.
Как связать правильный открытый ключ с закрытым ключом в моем приложении, чтобы проверить его?
Вы можете использовать утверждение заголовка kid
в своем токене: это необязательное утверждение заголовка, которое содержит идентификатор ключа, особенно полезно, когда у вас есть несколько ключей для подписи токенов, и вам нужно посмотреть вверх, чтобы проверить подпись.
Если подписанный JWT является JWS, рассмотрите определение из RFC 7515 :
4.1.4. Параметр заголовка «kid» (идентификатор ключа)
Параметр заголовка kid
(идентификатор ключа) является подсказкой, указывающей, какая клавиша
был использован для обеспечения безопасности JWS. Этот параметр позволяет авторам
явный сигнал об изменении ключа для получателей. Структура
kid
значение не указано. Его значение ДОЛЖНО быть чувствительным к регистру
строка. Использование этого параметра заголовка НЕОБЯЗАТЕЛЬНО.
При использовании с JWK значение kid
используется для соответствия JWK kid
значение параметра.