Azure Entra ID 令牌端点发出过期的令牌

问题描述 投票:0回答:1

这是我们在 MS 社区论坛上发布的问题的副本,因为它没有引起太多关注。

  • 我们有一个支持通过 Azure 进行单点登录的 Web 应用程序
  • 我们在AD中有相应的应用程序注册
  • 我们正在使用混合身份验证流程,遵循 OIDC

该流程之前已经通过其他几个注册进行了测试,并且对于我们所有的租户都运行良好,除了这个特定的租户(尝试了该租户的多个应用程序注册,所有注册都有相同的问题)。租户没有自定义令牌生命周期。

用于颁发令牌的端点是:

https://login.microsoftonline.com/{tenantId}/oauth2/v2.0/token
(单租户应用程序注册)

该流程使用来自 id 令牌的数据,需要首先验证该数据。 流行的 NodeJS 包用于验证令牌。问题是token总是验证失败。这是由于令牌的生命周期和过期时间,由令牌负载中的

iat
exp
属性表示。

例如,具有如下有效负载的令牌:

{
...,
"iat": 1695209618,
"nbf": 1695209618,
"exp": 1695209918,
...,
"auth_time": 1695209915,
...}

这些值的问题在于,该令牌是在

1695209915
处请求的,这几乎是 iat 之后
5 分钟。因此,问题的第一部分是端点总是发出一个几乎 5 分钟前的令牌。问题的第二部分是,当令牌到达服务器时,它总是已经过期。因此,除非您忽略令牌过期,否则它永远无法被验证。仅供参考,上面示例中的令牌是由 
1695209919
 收到的,正好是在它过期之后。

回顾一下奇怪的时刻:

    代币总是在 5 分钟后发行
  • iat
    始终在auth_time之前
  • 当令牌到达时,它已经过期了
  • 令牌的生命周期只有 5 分钟(我在 Azure 文档中读到 id 令牌的最短生命周期是 10 分钟)
我们希望有经验的 Azure 身份平台用户能够提供有关在哪里查看、调试和查找问题原因的指导和建议。

到目前为止我们已经尝试过:

    重新注册应用程序
  • 仔细检查所有端点和客户端凭据
  • 仔细检查代币
azure azure-active-directory active-directory
1个回答
0
投票

注意:如果相同的流程适用于所有租户,但不适用于一个租户,则可能是配置设置错误或某些策略在租户中被覆盖。

因此尝试使用以下查询创建

自定义令牌生命周期

POST https://graph.microsoft.com/v1.0/policies/tokenLifetimePolicies Content-type: application/json { "definition": [ "{\"TokenLifetimePolicy\":{\"Version\":1,\"AccessTokenLifetime\":\"8:00:00\"}}" ], "displayName": "Contoso token lifetime policy", "isOrganizationDefault": true }

enter image description here

对于

sample,我将令牌生命周期设置为 8 小时,并使用以下参数生成 访问令牌

https://login.microsoftonline.com/TenantID/oauth2/v2.0/token client_id:ClientID scope:https://graph.microsoft.com/.default code:code redirect_uri:https://jwt.ms grant_type:authorization_code client_secret:ClientSecret

enter image description here

生成的访问令牌的生命周期为 8 小时。

如果问题仍然存在,请检查以下内容:

    确保没有策略覆盖令牌生命周期策略。
  • 检查应用程序的清单是否设置正确。
  • 检查是否存在任何时间同步问题,即“时钟偏差”,其中客户端时钟和令牌发行服务时钟不同步。
  • 参考资料:

5 分钟的时钟偏差 AzureAD/microsoft-authentication-library-for-js · GitHub

创建 tokenLifetimePolicy - Microsoft Graph v1.0 |微软

© www.soinside.com 2019 - 2024. All rights reserved.