gpt4 book ai didi

azure - 使用 Azure Active Directory 客户端凭据流控制身份验证 token 的过期

转载 作者:行者123 更新时间:2023-12-05 00:09:54 25 4
gpt4 key购买 nike

我使用端点/oauth2/token 从 Azure Active Directory 请求(通过 HTTP POST)身份验证持有者 token 。AAD 中的一切设置都很好,可以注册使用此流程检索此 token 的 Web 客户端。使用 client_id 和 client_secret (共享对称 key ),我成功获取包含用于身份验证的 jwt 持有者 token 的 json 响应。

我想要了解的是,我们如何配置 token 的过期时间超过 1 小时过期时间,这似乎是我通过此 POST 请求获取的 token 。我在 Azure AD 经典门户中生成的共享 key 的有效期为 2 年。但是,返回的 token 有 1 小时有效期。

基于此,我假设此流程的工作方式(至少就 AAD 而言)是我们的 Web 客户端需要自行安排在 1 小时内重新发布对新身份验证 token 的请求确保用于 Web 客户端进行的经过身份验证的 REST 调用的身份验证 token 的新鲜度。我想如果之前发出的 token 失败然后发​​出新的请求(这只是实现细节......),它也可能会捕获异常。

这是为此流程保持身份验证 token 刷新的正常方法吗?我知道,对于大多数其他流程,都会生成刷新 token ,并且可以完成 OAuth“舞蹈”以保持身份验证 token 有效。 ADAL 很好地抽象了所有这些细节,但在本例中,我使用客户端凭据流并使用对 oauth2/token 端点的 HTTP POST 请求,并且在此流中(根据 OAuth2 RFC)不提供刷新 token 。 ]

我曾假设也许可以为 OAuth token 配置更长的有效期,甚至可以为此服务器/服务器 secret 客户端场景配置无限期 token 。这可以在 Azure AD 设置中实现吗?

文档链接为Azure AD token lifetime config表明生命周期是可配置的。

最佳答案

在最后一个 token 过期之前获取新 token 的一种简单方法是跟踪它的过期时间。因此,每当您为 HTTP 调用获取 token 时:

  1. 如果我们没有 token ,请获取一个
  2. 如果即将到期,请更换新的
  3. 无论如何,返回缓存的 token 或新 token

确实可以根据您链接的文档为每个服务主体、应用程序或组织配置生命周期。因此,如果您愿意,您应该能够将访问 token 的生命周期延长至 1 天。

我已确认您确实也可以延长 Azure AD 免费套餐的访问 token 到期时间。关于 documentation page 的免责声明确实说某些功能将来可能需要高级版。并没有真正说明什么:/

您需要Azure AD v2 PowerShell cmdlets去做这个。几个命令就足够了:

Connect-AzureAD
# Create new policy in Azure AD
New-AzureADPolicy -Definition @("{`"TokenLifetimePolicy`":{`"Version`":1,`"AccessTokenLifetime`":`"03:00:00`"}}") -DisplayName ThreeHourTokenPolicy -IsOrganizationDefault $false -Type TokenLifetimePolicy
# Apply on Graph API's service principal in my directory
Add-AzureADServicePrincipalPolicy -ObjectId ad17cfce-f2fd-4b3e-91f5-aa0a82e94012 -RefObjectId 640f76ea-6ef6-40c8-8ed5-178a76e7e762

您必须找出服务主体的对象 ID,例如Graph API 仅针对来自那里的 token 进行设置。或者,您可以在第二个调用中设置 -IsOrganizationDefault $true 并完全省略第三个调用,使该策略适用于所有服务主体和应用程序,除非它们有更具体的策略。

Azure AD 中没有无限期的访问 token ,但您可以将刷新 token 生命周期设置为直到撤销

关于azure - 使用 Azure Active Directory 客户端凭据流控制身份验证 token 的过期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42026426/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com