90天后AcquireTokenSilentAsync会不起作用?

时间:2016-05-13 02:31:17

标签: azure authentication adal

我正在构建一个ASP.NET Web API服务,该服务连接到Azure Graph API以获取用户列表。 所以我的方案是在这个服务上创建一个MVC页面=>让Azure AD管理员登录并授予权限=> cache access_token并使用它来调用API。

但是,我承认access_token将在1小时后过期。即使使用refresh_token续订,管理员也必须在90天后再次手动登录此服务。

我读了一些使用ADAL库中的AcquireTokenSilentAsync方法的示例。但不确定90天后它是否会无用?

2 个答案:

答案 0 :(得分:1)

是的,默认刷新令牌在14天后到期(一小时内访问令牌),但有了一些配置,我相信它可以持续到90天。这是出于安全原因和良好做法。它没有错。但是,这只有在您实现自己的缓存时才有效,因为默认情况下ADAL缓存使用内存,重启后它将丢失这些令牌。

https://github.com/Azure-Samples/active-directory-dotnet-webapp-webapi-openidconnect

答案 1 :(得分:1)

是的,目前Access Token将在一小时内到期。刷新令牌有效期为14天,可用于获取新的访问令牌和新的刷新令牌。您可以继续这样做长达90天。 (请注意,这些是当前值,它们将来可能会更改。)AcquireTokenSilentAcquireTokenSilentAsync将尝试使用现有状态(即刷新令牌,如果可用)来获取新的访问令牌,或者如果不可能则抛出异常。

那就是说,我怀疑这可能不是你方案的最佳方法。听起来你处于以下两种情况之一:

  1. 您正在构建一个中间件服务(API),该服务将由经过身份验证的用户访问的其他应用程序使用。如果是这种情况,您可以使用代表流,其中(a)您的中间件服务在Azure AD中注册为Web应用程序/ API,(b)面向用户的客户端应用程序并获取访问令牌(对于当前用户)到中间件API,以及(c)中间件API使用该访问令牌代表原始用户获取Azure AD Graph API的新访问令牌。

  2. 您只需要启用对Graph API的无人参与访问。如果中间件服务是高度可信的环境,您可以使用仅限应用程序的身份验证(也称为"无头"或"守护程序"应用程序)来获取没有任何用户的访问令牌上下文。 (这是客户端凭据授予OAuth 2.0流程。)