1

J'essaie d'authentifier l'utilisateur tout en utilisant Microsoft Graph et continuer à obtenir l'erreur Failed to acquire token silently. Call method AcquireToken.Impossible d'acquérir le jeton en mode silencieux. Méthode d'appel AcquireToken

Des idées pour résoudre ce problème?

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}"); 
} 

Répondre

1

Avec ADAL, votre application obtenir l'accès et de rafraîchissement jeton la première fois qu'un utilisateur final se connecte à l'aide middleware Connect OpenID ASP.Net OWIN et ADAL .Net. Voir l'exemple de code here, dans la notification OnAuthorizationCodeReceived, il acquiert le jeton d'accès et le jeton d'actualisation et les place dans une instance de cache.

La prochaine fois, vous pouvez utiliser AcquireTokenSilentAsync pour acquérir un jeton de sécurité sans demander les informations d'identification de l'utilisateur. Il vérifie le cache des jetons et confirme la durée de vie du jeton d'accès. S'il est toujours valide, renvoyez ce jeton d'accès depuis le cache. S'il voit qu'il a expiré, il utilisera le jeton d'actualisation pour obtenir un nouveau jeton d'accès. Mais si vous appelez AcquireTokenSilentAsync avant que l'application accède pour la première fois à l'accès et à l'actualisation des jetons au moment de la connexion et les place dans une instance de cache, ou si vous n'arrivez pas à initialiser AuthenticationContext avec la même instance de cache, la requête échouer. Ensuite, vous devez émettre un nouveau défi OWIN comme votre code indiqué.