Я хочу защитить JWT с помощью асимметричного c шифрования, и я не уверен, верна ли моя идея.
В общем, шифрование данных - это хорошая идея. Особенно, если вы транспортируете конфиденциальные данные.
Позвольте мне описать поток […]. В этом случае Серверу авторизации и Серверу API потребуется хранить закрытый ключ для расшифровки. Это решение достаточно безопасно? Можно ли хранить один и тот же закрытый ключ на двух серверах? Вы знаете, правильный ли поток? Или, может быть, поток данных должен быть другим?
Если я правильно понимаю ваш поток, токен зашифрован на стороне AS (Сервер авторизации) и расшифрован на стороне сервера API. Поэтому вы хотите запретить клиенту читать его содержимое.
Этот поток абсолютно нормален. И AS, и сервер API будут иметь общий секрет, чтобы они могли зашифровать или расшифровать токен.
Я предлагаю вам прочитать больше о JWE (зашифрованном JWT) и связанных с ним RFC7516. . Эта спецификация описывает стандартный способ шифрования токенов. В зависимости от языка программирования, который вы используете, вы можете найти библиотеки, которые поддерживают JWE. https://jwt.io/ перечисляет множество библиотек, и некоторые из них поддерживают больше, чем подписанные токены (JWS). Например, com.nimbusds / nimbus-jose-jwt (Java) или web-token / jwt-framework (PHP).
A возможно поток может быть следующим. Обратите внимание, что это, несомненно, создаст сложность в коде вашего сервера AS и API. Поэтому, прежде чем реализовать его, вы должны убедиться, что необходимо зашифровать ваши токены! (например, вы транспортируете конфиденциальные данные)
- AS подписывает токен своим закрытым ключом (например, алгоритм RSxxx). , PSxxx или ESxxx) => JWS
- JWS шифруется в соответствии с RFC7516 с помощью алгоритма шифрования asymmetri c (например, AxxxKW или AxxxGCMKW) и общим ключом => Вложенный токен (JWS в JWE). )
- Вложенный токен отправляется клиенту
- Клиент не может прочитать содержимое, но токен можно отправить на сервер API как обычно
- Сервер API расшифровывает JWE с общим ключом для получения JWS
- Сервер API проверяет JWS с помощью AS publi c key