Как защитить секрет OAuth2.0 и чередование секретных ключей

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


person Apurva Singh    schedule 05.08.2020    source источник


Ответы (1)


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

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

Если используются симметричные ключи, то API не смогут проверять токены в памяти, хотя они могут использовать самоанализ для проверки токенов, как в Шаг 16 моего сообщения в блоге.

person Gary Archer    schedule 05.08.2020