Изменение открытого ключа JWT активного каталога Azure - PullRequest
1 голос
/ 10 октября 2019

Azure AD случайным образом изменяет открытый токен JWT без предупреждения. Могу ли я полностью отключить эту функцию? Я бы хотел, чтобы открытый ключ никогда не менялся.

1 Ответ

2 голосов
/ 11 октября 2019

Ключи подписи Azure AD меняются периодически, а иногда и немедленно.

Обратите внимание на соответствующее руководство Microsoft: Перенос ключа подписи в Azure Active Directory

В целях безопасности ключ подписи Azure AD периодически обновляется. и, в случае чрезвычайной ситуации, может быть немедленно перенесен. Любое приложение, которое интегрируется с Azure AD, должно быть готово к обработке события опрокидывания ключа независимо от того, как часто оно происходит. Если этого не произойдет, и ваше приложение попытается использовать ключ с истекшим сроком для проверки подписи на токене, запрос на вход не будет выполнен.

В вашем вопросе вы упомянули "Am I able to turn the functionality off completely? I would like the public key to never change.",

Вы не можете контролировать это поведение, как описано в документации выше. Ваше приложение должно быть спроектировано так, чтобы оно могло справиться с этим поворотом ключа.

Вы всегда можете получить последние подписывающие ключи, используя документ открытия OpenID Connect. Найдите значение jwks_uri.

Вы можете использовать общие конечные точки для доступа к этой информации или конкретные конечные точки арендатора.

Azure AD V1 common endpoint - https://login.microsoftonline.com/common/.well-known/openid-configuration    
Azure AD V2 common endpoint - https://login.microsoftonline.com/common/v2.0/.well-known/openid-configuration 

Можно найти ключи подписипо URL-адресу, например

Azure AD V1 - https://login.microsoftonline.com/common/discovery/keys     
Azure AD V2 - https://login.microsoftonline.com/common/discovery/v2.0/keys

Опять же, вы также можете использовать конкретную конечную точку арендатора, например

https://login.microsoftonline.com/mytenant.onmicrosoft.com/discovery/keys
https://login.microsoftonline.com/mytenant.onmicrosoft.com/discovery/v2.0/keys

Найденное здесь значение ключей kid будет совпадатьс идентификатором ключа, который использовался для подписи полученного токена. Это вы можете проверить в заголовке токена. Пример:

{
  "typ": "JWT",
  "alg": "RS256",
  "x5t": "iBjL1Rcqzhiy4fpxIxdZqohM2Yk",
  "kid": "iBjL1Rcqzhiy4fpxIxdZqohM2Yk"
}

На заметку -

  1. Если вы планируете кэшировать некоторые ключи, ваше приложение должно будет регулярно проверять наличие обновлений, а в случаесбоя, перейдите к конечной точке выше по требованию, чтобы получить новые ключи. В этой документации Microsoft по проверке подписи упоминается, что

    Разумная частота проверки обновлений открытых ключей, используемых Azure AD, - каждые 24 часа.

  2. Во многих случаях явная проверка токенов даже не требуется, поскольку промежуточное ПО Azure AD имеет встроенные возможности для проверки токенов доступа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...