Как защитить секретные ключи OAuth2.0 и их ротацию - PullRequest
0 голосов
/ 05 августа 2020

OAuth2.0 использует секрет как симметричный c ключ, используемый, скажем, алгоритмом HMACSHA256 для генерации подписи. Этот секрет важен, иначе любой может создать «действительный» токен JWT и передать его серверу. Например, если я создаю JWT и подписываю его, знак действителен. Секретный или симметричный c ключ известен только серверу. Поэтому я не могу создать JWT, который будет «проходить» с сервером, поскольку я не знаю секрета сервера. Все идет нормально. Теперь, если есть несколько серверов и несколько микросервисов, что потенциально может иметь десятки серверов, все они должны знать один и тот же секрет, чтобы JWT «проходил» через все серверы. Кажется, это большая лазейка. Если взломан один сервер и секрет известен, взлом могут быть взломаны все серверы. Кроме того, небольшой способ облегчить это - время от времени менять секрет. Как это можно сделать? Если мы храним секрет в хранилище, то пароли для хранилища будут на всех серверах. Так что даже это не помогает. Есть идеи ??

1 Ответ

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

Чаще всего RSA256 используется для подписи токенов с помощью асимметричного c ключа, так что:

  • Сервер авторизации знает закрытый ключ
  • Любой (включая API) может загрузить publi c ключ от конечной точки JWKS сервера авторизации, группа использует его для проверки токенов

Если используются ключи симметри c, то API-интерфейсы не смогут проверять токены в памяти, хотя они может использовать интроспекцию для проверки токенов, как в шаге 16 моего сообщения в блоге .

...