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挑戰。

相關問題