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

使用Azure Active Directory客户端凭据流控制身份验证令牌的过期,azure,active-directory,oauth-2.0,jwt,Azure,Active Directory,Oauth 2.0,Jwt,我使用endpoint/oauth2/token(通过HTTP POST)从Azure Active Directory请求身份验证承载令牌。 AAD中的所有设置都很好,可以注册使用此流检索此令牌的web客户端。使用了客户机id和客户机机密(共享对称密钥),我成功地获得了json响应,其中包含用于auth的jwt承载令牌 我想了解的是,我们如何在1小时到期之后配置令牌的到期时间,这似乎是我通过此POST请求获取的令牌上的到期时间。我在Azure AD classic门户中生成的共享密钥已过期2年

我使用endpoint/oauth2/token(通过HTTP POST)从Azure Active Directory请求身份验证承载令牌。 AAD中的所有设置都很好,可以注册使用此流检索此令牌的web客户端。使用了客户机id和客户机机密(共享对称密钥),我成功地获得了json响应,其中包含用于auth的jwt承载令牌

我想了解的是,我们如何在1小时到期之后配置令牌的到期时间,这似乎是我通过此POST请求获取的令牌上的到期时间。我在Azure AD classic门户中生成的共享密钥已过期2年。但是,返回的令牌已过期1小时

基于此,我假设此流的工作方式(至少就AAD而言)是,我们的web客户端需要安排自己在1小时的时间范围内重新发布对新身份验证令牌的请求,以确保用于web客户端进行的已验证REST调用的身份验证令牌的新鲜度。我猜如果先前发布的令牌失败,它也可能捕获异常,然后发出新请求(这只是实现细节…)

这是保持此流的身份验证令牌刷新的正常方式吗? 我知道,对于大多数其他流,会生成一个刷新令牌,并且可以执行OAuth“舞蹈”来保持auth令牌的有效性。ADAL很好地抽象了所有这些细节,但在本例中,我使用的是客户机凭证流,使用对oauth2/令牌端点的HTTP POST请求,并且在该流中(根据oauth2 RFC),没有提供刷新令牌。]

我曾假设可能可以在OAuth令牌上配置更长的到期时间,甚至可能是这个服务器/服务器机密客户端场景的不确定令牌。 这在Azure广告设置中可能吗


链接到的文档表明,生命周期是可配置的。

在最后一个令牌到期之前获取新令牌的简单方法是跟踪它的到期时间。因此,无论何时获取HTTP调用的令牌:

  • 如果我们没有代币,就买一个
  • 如果到期时间快到了,买一个新的
  • 无论如何,返回缓存的令牌或新令牌
  • 而且,确实可以根据您链接的文档,根据服务主体、应用程序或组织配置生命周期。因此,如果您愿意,您应该能够将访问令牌的生存期延长到1天

    我已经确认你确实可以在Azure广告的免费层上延长访问令牌到期时间。网站上的免责声明确实指出,某些功能在未来可能需要额外付费。并没有说什么:/

    你需要有足够的时间来做这件事。几个命令就足够了:

    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,以便从那里为令牌设置它。或者,您可以只在第二次调用中设置
    -isoorganizationdefault$true
    ,而完全忽略第三次调用,使策略应用于所有服务主体和应用程序,除非它们有更具体的服务主体和应用程序


    Azure AD中没有不确定的访问令牌,但您可以将刷新令牌生存期设置为直到撤销。

    在对该文档进行二读时(现在已超过1年)我链接到它似乎配置令牌访问生命周期的功能在AAD公共预览中,当它超出预览阶段时,可能会被限制为AAD Premium。感谢您澄清没有不确定的代币。你知道这项功能现在是否已经成为免费AAD层的一部分吗?它在免费层上是可用的,但我不能说它是否会保持这种状态。用示例更新答案。Juunas-非常感谢提供示例-使用Powershell cmdlet等