1

我想在使用Microsoft Graph的情况下对用户进行身份验证,并不断收到错误Failed to acquire token silently. Call method AcquireToken无法默认获取令牌。调用方法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}"); 
} 

回答

1

随着ADAL,您的应用程序将获得访问和刷新令牌首次终端用户通过使用ID连接ASP.Net OWIN中间件和ADAL净登录英寸查看代码示例here,在OnAuthorizationCodeReceived通知中,它将获取访问令牌和刷新令牌并将它们放入缓存实例中。

下一次,您可以使用AcquireTokenSilentAsync获取安全令牌而不要求用户凭证。它将检查令牌缓存并确认访问令牌的生存期,如果仍然有效,则从缓存中返回该访问令牌。如果它看到它已过期,那么它将使用刷新令牌为您提供一个新的访问令牌。

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

相关问题