【问题标题】:Failed to acquire token silently. Call method AcquireToken静默获取令牌失败。调用方法 AcquireToken
【发布时间】:2017-10-09 13:19:33
【问题描述】:

我在使用 Microsoft Graph 时尝试对用户进行身份验证,并不断收到错误 Failed to acquire token silently. Call method AcquireToken

任何想法如何解决这个问题?

try
{
    AuthenticationResult result =
        await authContext.AcquireTokenSilentAsync(SettingsHelper.GraphResourceId,
            clientCredential,
            userId);
    return result.AccessToken;
}
// Unable to retrieve the access token silently.
catch (AdalException ex)
{
    HttpContext.Current.Request.GetOwinContext().Authentication.Challenge(
        new AuthenticationProperties() { RedirectUri = "/" },
        OpenIdConnectAuthenticationDefaults.AuthenticationType);

    throw new Exception(Resource.Error_AuthChallengeNeeded + $" {ex.Message}");
}

【问题讨论】:

    标签: asp.net model-view-controller azure-active-directory microsoft-graph-api


    【解决方案1】:

    借助 ADAL,您的应用将在最终用户使用 OpenID Connect ASP.Net OWIN 中间件和 ADAL .Net 首次登录时获得访问和刷新令牌。参见代码示例 here ,在 OnAuthorizationCodeReceived 通知中,它将获取访问令牌和刷新令牌并将它们放在缓存实例中。

    下次您可以使用AcquireTokenSilentAsync 获取安全令牌,而无需询问用户凭据。它将检查令牌缓存并确认访问令牌的生命周期,如果仍然有效,则从缓存中返回该访问令牌。如果它发现它已过期,那么它将使用刷新令牌为您获取新的访问令牌。

    但是,如果您在应用程序在登录时首次获取访问和刷新令牌并将它们放入缓存实例之前调用 AcquireTokenSilentAsync,或者如果您未能使用完全相同的缓存实例初始化 AuthenticationContext,则请求将失败。然后,您应该发出一个新的 OWIN 挑战,如您的代码所示。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-23
      • 2015-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-06
      相关资源
      最近更新 更多