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

时间:2017-02-03 14:24:18

标签: azure active-directory oauth-2.0 jwt

我正在使用endpoint / oauth2 / token从Azure Active Directory请求(通过HTTP POST)身份验证承载令牌。 AAD中的所有内容都设置正常,以注册使用此流程检索此令牌的Web客户端。使用了client_id和client_secret(共享对称密钥),并且我成功获得了包含用于auth的jwt承载令牌的json响应。

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

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

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

我曾假设可能在OAuth令牌上配置更长的到期时间,甚至可能是此服务器/服务器机密客户端场景的无限期令牌。 这可能在Azure AD设置中吗?

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

1 个答案:

答案 0 :(得分:2)

在最后一个到期之前获得新令牌的简单方法是跟踪它何时到期。那么每当你为HTTP调用获取一个令牌时:

  1. 如果我们没有令牌,请获取一个
  2. 如果到期时间结束,请换一个新的
  3. 无论如何,返回缓存的令牌或新令牌
  4. 根据您链接的文档,确实可以按服务主体,应用程序或组织配置生命周期。因此,如果您愿意,您应该能够将访问令牌的生命周期延长到1天。

    我已经确认您确实可以在Azure AD的免费层上延长访问令牌到期时间。 documentation page上的免责声明确实说某些功能可能在将来需要使用Premium 。并没有真正说出:/

    您需要Azure AD v2 PowerShell cmdlets才能执行此操作。几个命令就足够了:

    -IsOrganizationDefault $true

    您必须找出服务主体的对象ID是什么,例如Graph API只为那里的标记设置它。或者,您可以在第二个调用中设置Math.Cos(90 * Math.PI / 180)并完全省略第三个调用,使策略适用于所有服务主体和应用程序,除非它们具有更具体的一个。

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