JWT: несколько ключей publi c для создания токена и декодирования с использованием одного закрытого ключа - PullRequest
0 голосов
/ 08 мая 2020

У меня есть реализация JWT, к которой обращаются несколько клиентов. В том смысле, что несколько клиентов отправляют мне токен JWT, и они создают токен JWT, используя ключ RSA publi c, которым я поделился между ними. И я декодирую токен JWT с помощью закрытого ключа RSA.

Но теперь по нескольким причинам безопасности мне нужно отправить им разные ключи publi c и получить токен JWT, и я расшифрую его с помощью одного закрытый ключ у меня есть.

Вкратце, как я буду генерировать несколько c ключей publi и отдельные закрытые ключи или любой аналогичный подход.

Ответы [ 2 ]

1 голос
/ 08 мая 2020

(...) отправьте им разные publi c ключи и (...) расшифруйте его, используя один закрытый ключ, который у меня есть.

Насколько я знаю RSA закрытый ключ может иметь только один publi c ключ .

Но теперь из-за некоторых соображений безопасности мне нужно отправлять им разные publi c keys (...)

Они все еще "publi c", если вам нужно послать разные publi c ключ каждому клиенту?

Если я хорошо понимаю ваш Проблема, я бы рекомендовал переключиться на PKI с сертификатами (например, X.509), в которых вы являетесь органом власти. Поток будет:

  1. Клиент генерирует закрытый ключ
  2. Клиент создает CSR
  3. Клиент отправляет вам CSR
  4. Вы подписываете CSR своим CA
  5. Вы отправляете обратно CRT
  6. Клиент использует свой закрытый ключ для подписи JWT
  7. Клиент отправляет вам JWT
  8. Вы проверяете это в своем CA

С этим решением вы получите все преимущества аутентификации сертификата клиента.

Если в какой-то момент вы больше не доверяете клиенту, вы можете использовать список отзыва.

Кстати, я никогда не видел такого потока ... и поскольку я не знаю Не знаю, чего именно вы хотите достичь, вы должны прочитать это как ответ на вопрос «Как я могу реализовать аутентификацию сертификата клиента с помощью JWT?»

0 голосов
/ 22 августа 2020

У каждого из них должен быть свой закрытый ключ подписи. Они подписывают JWT. Затем они шифруют JWT с помощью вашего c ключа / сертификата publi.

Вы расшифровываете jwt своим закрытым ключом. Затем вы проверяете подпись каждой стороны, используя их publi c ключ / сертификат.

Таким образом JWT зашифрован, и только вы можете получить к нему доступ. Он подписан, поэтому вы можете проверить отправителя

...