2017-02-08 1 views
1

La raison pour laquelle il n'y a pas d'information à ce sujet est probablement parce que cela devrait être évident, mais je me bats néanmoins.Comment accéder et utiliser le jeton Adal délégué

Après je me connecter à mon DAA-locataire à l'aide ADAL dans StartUp.Auth.cs Isuccessfully obtenir un jeton:

private async Task OnAuthorizationCodeReceivedAAD(AuthorizationCodeReceivedNotification notification) 
     { 
      var code = notification.Code; 

      var credential = new ClientCredential(appId, appSecret); 
      var userObjectId = notification.AuthenticationTicket.Identity.FindFirst("http://schemas.microsoft.com/identity/claims/objectidentifier").Value; 
      var context = new Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext("https://login.microsoftonline.com/tenant.onmicrosoft.com/"); 

      var uri = new Uri(HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Path)); 

      var result = await context.AcquireTokenByAuthorizationCodeAsync(code, uri, credential); 
     } 

Je peux ajouter un point d'arrêt ici et voir le jeton. Ma question est, comment puis-je maintenant accéder à ce jeton à travers mon code d'autres classes? par exemple pour appeler une API. Le jeton doit être délégué, donc les informations d'identification du client ne fonctionneront pas, c'est tout ce que je peux trouver sur docs.

Répondre

2

La classe AuthenticationContext stocke le jeton dans le cache par défaut lorsque nous acquérons le jeton qui l'utilise.

Ensuite, nous pouvons récupérer le jeton du cache en fonction de la ressource et de l'utilisateur en utilisant AcquireTokenSilentAsync. Cette méthode va acquérir le jeton du cache et renouveler le jeton si nécessaire. Voici un exemple pour votre référence:

AuthenticationContext authContext = new AuthenticationContext(authority); 
ClientCredential credential = new ClientCredential(clientId, secret); 
string userObjectID = ClaimsPrincipal.Current.FindFirst("http://schemas.microsoft.com/identity/claims/objectidentifier").Value; 
AuthenticationResult result = await authContext.AcquireTokenSilentAsync(resource,credential, new UserIdentifier(userObjectID, UserIdentifierType.UniqueId));