Azure活动目录JWT公共密钥更改

时间:2019-10-10 20:20:46

标签: azure jwt azure-active-directory

Azure AD会随机更改JWT公共令牌,而不会发出警告。我可以完全关闭功能吗?我希望公钥永远不变。

1 个答案:

答案 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"
}

附带说明-

  1. 如果您计划缓存某些密钥,则您的应用将需要定期检查更新,如果失败,请根据需要转到上述端点以获取新密钥。 Microsoft在validating the signature上的文档中提到

      

    检查由以下人员使用的公钥更新的合理频率   Azure AD是每24小时一次。

  2. 许多次甚至不需要显式地验证令牌,因为Azure AD中间件具有内置的用于验证访问令牌的功能。