Azure AD会随机更改JWT公共令牌,而不会发出警告。我可以完全关闭功能吗?我希望公钥永远不变。
答案 0 :(得分:2)
Azure AD签名密钥有时会周期性旋转,有时也会立即旋转。
请查看相关的Microsoft指南:Signing key rollover in 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在validating the signature上的文档中提到
检查由以下人员使用的公钥更新的合理频率 Azure AD是每24小时一次。
许多次甚至不需要显式地验证令牌,因为Azure AD中间件具有内置的用于验证访问令牌的功能。