0

J'ai besoin d'obtenir l'identificateur de nom du jeton envoyé par Azure AD. Je suppose que c'est unique pour chaque utilisateur de l'AD et avoir une certaine logique d'autorisation personnalisée basée sur elle. Par exemple,Récupération de NameIdentifier à partir d'Azure Active Directory AuthenticationResult.AccessToken

AuthenticationResult result = authenticationContext.AcquireToken(webApiResourceId, certificateCredential); 
string accessToken = result.AccessToken; 

Ce accessToken est envoyé au WebAPI comme AuthenticationHeader, qui décrypte et va chercher le nameidentifier comme

Claim tenantClaim = ClaimsPrincipal.Current.FindFirst(ClaimTypes.NameIdentifier); 

Mais ce processus sur la WebAPI est transparente et est réalisée par ADAL. Cependant, j'ai besoin d'obtenir le NameIdentifier du côté du client lui-même. Y a-t-il un moyen de récupérer le NameIdentifier au niveau du client lui-même, en décryptant le AccessToken? Je ne trouve pas la bonne réponse à la recherche.

Répondre

2

Pouvez-vous expliquer pourquoi vous avez besoin du NameIdentifier sur le client? Notez que le client n'effectue aucune validation sur le jeton. Par conséquent, vous ne devez prendre aucune décision de contrôle d'accès sur le client en fonction du contenu du jeton. Le côté serveur peut prendre des décisions en fonction du contenu du jeton étant donné que le jeton lui-même est validé avant de rendre son contenu disponible pour l'application. Autre considération importante: le jeton d'accès est destiné à l'API Web et le client ne devrait pas essayer de le lire. Même si vous parvenez à le lire, vous générez une logique extrêmement fragile car le format peut changer à tout moment, il peut être chiffré avec une clé que votre client ne devrait pas avoir, et ainsi de suite. Si vous avez besoin d'accéder à NameIdentifier sur le client pour différentes raisons, vous pouvez inspecter le id_token. Le jeton d'identité est un autre jeton envoyé avec le jeton d'accès. Le jeton d'identité est destiné au client, vous pouvez donc le regarder en toute sécurité. Vous pouvez le trouver en tant que propriété dans AuthenticationResult. HTH V.

+0

Comme je l'ai mentionné dans mon article, le WebAPI utilise une certaine logique d'autorisation personnalisée basée sur NameIdentifier. Par conséquent, les clients sont tenus de donner leur NameIdentifier pour être intégré au service. Mon exigence, par conséquent, est de simplement obtenir le NameIdentifier. Il n'y a pas d'autre moyen de l'obtenir, sauf un jeton de décryptage. Quant à l'id_token, il vient comme [null] (http://imgur.com/S2Lm8IJ) pour le client. Le client utilise l'authentification par certificat avec AzureAD. Est-ce la raison pour laquelle id_token est nul? –

+1

Si vous utilisez l'authentification par certificat, le jeton que vous récupérez ne représente pas un utilisateur mais une identité d'application. Cela n'aboutit pas à un jeton d'identité. Si vous avez besoin d'embarquer une application, il existe de nombreux autres paramètres caractérisant une application (comme clientid) que vous pouvez utiliser. Aussi, je suis confus. Si vous devez embarquer un client, pourquoi ne pouvez-vous pas simplement afficher le jeton dans la logique d'intégration? Extraire des informations d'un token que vous venez d'obtenir pour un autre service sans même le valider ne semble pas correspondre à un modèle dont je me souvienne. – vibronet