Ключи подписи 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"
}
На заметку -
Если вы планируете кэшировать некоторые ключи, ваше приложение должно будет регулярно проверять наличие обновлений, а в случаесбоя, перейдите к конечной точке выше по требованию, чтобы получить новые ключи. В этой документации Microsoft по проверке подписи упоминается, что
Разумная частота проверки обновлений открытых ключей, используемых Azure AD, - каждые 24 часа.
Во многих случаях явная проверка токенов даже не требуется, поскольку промежуточное ПО Azure AD имеет встроенные возможности для проверки токенов доступа.