1

Microsoft Graphを使用している間にユーザーを認証しようとしていて、エラーが発生し続ける場合Failed to acquire token silently. Call method AcquireTokenトークンをサイレントに取得できませんでした。呼び出しメソッドAcquireToken

これを修正する方法はありますか? ADALで

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

、あなたのアプリがアクセスを取得し、エンドユーザがOpenIDを接続ASP.Net OWINミドルウェアとADAL .NETを使用してログインする最初の時間をトークン更新されます。コードサンプルhereを参照し、OnAuthorizationCodeReceived通知でアクセストークンとリフレッシュトークンを取得し、キャッシュインスタンスに配置します。

次回はAcquireTokenSilentAsyncを使用して、ユーザー資格情報を要求せずにセキュリティトークンを取得できます。トークンキャッシュをチェックしてアクセストークンの有効期間を確認し、まだ有効な場合は、そのアクセストークンをキャッシュから戻します。有効期限が切れていると判断した場合は、リフレッシュトークンを使用して新しいアクセストークンを取得します。

しかし、アプリケーションがサインイン時に最初にアクセス権とリフレッシュトークンを取得してキャッシュインスタンスに配置する前にAcquireTokenSilentAsyncを呼び出した場合、まったく同じキャッシュインスタンスでAuthenticationContextを初期化できない場合、要求は失敗します。次に、コードとして新しいOWINチャレンジを発行する必要があります。