2017-10-12 5 views
0

J'essaye d'authentifier l'utilisateur avec ADFS et j'utilise ADAL. L'authentification semble fonctionner puisque je peux obtenir le AccessToken. Le problème est que, en regardant le code authResult contient UserInfo où toutes les propriétés (par exemple GivenName ou FamilyName) sont null.Obtenir UserInfo à partir d'ADFS en UWP avec ADAL

AuthenticationContext authContext = null; 
AuthenticationResult authResult; 
try 
{ 
    authContext = new AuthenticationContext(authority, false); 
    authResult = await authContext.AcquireTokenAsync(resource, clientId, new Uri(returnUri), 
        new PlatformParameters(PromptBehavior.Auto, false)); 
} 

Ces valeurs sont nulles à cause de la configuration ADFS? J'ai noté que le décodage de l'AccessToken renvoyé je peux lire l'information d'utilisateur. Mais je ne pense pas que le décodage du jeton JWT soit la bonne façon d'obtenir ces informations. Avez-vous une meilleure suggestion?

J'ai aussi vu des gens obtenir des informations en utilisant les réclamations, mais je ne sais pas exactement comment l'utiliser sur UWP, puisque tout l'échantillon que j'ai trouvé utilisé

ClaimsPrincipal claimsPrincipal = System.Threading.Thread.CurrentPrincipal as ClaimsPrincipal; 

Mais System.Threading.Thread n'est pas disponible sur UWP .

Répondre

0

Normalement, le access_token est utilisé dans les scénarios de connexion Oauth et OpenID et destiné à être consommé par la ressource. Pour identifier l'utilisateur, nous devons utiliser le id_token (vérifier le jeton et extraire l'utilisateur abut des revendications en décodant le jeton). S'il vous plaît se référer ci-dessous sur l'utilisation de jetons:

  • id_token: Un jeton JWT utilisé pour représenter l'identité de l'utilisateur. La revendication 'aud' ou audience de l'ID_token correspond à l'ID client de l'application native ou serveur .
  • access_token: Jeton JWT utilisé dans les scénarios de connexion Oauth et OpenID et destiné à être consommé par la ressource. La réclamation 'aud' ou audience de ce jeton doit correspondre à l'identificateur de la ressource ou Web API.
  • refresh_token: Ce jeton est soumis à la place de la collecte des informations d'identification utilisateur pour fournir une authentification unique. Ce jeton est émis et consommé par AD FS et n'est pas lisible par les clients
    ou les ressources.

Et vous pouvez consulter le lien ci-dessous sur le client natif de scénario API web pour ADFS:

AD FS Scenarios for Developers - Native client to Web API

+0

Pouvez-vous aider à comprendre comment puis-je obtenir le id_token et extraire les réclamations? – user2297037

+0

Le 'id_token' devrait être capable d'acquérir via l'objet' authResult' ('authResult.IdToken') comme le code que vous partagez. Et pour extraire les revendications de jeton, vous pouvez utiliser 'System.IdentityModel.Tokens.Jwt'. Voici un [fil similaire] (https://stackoverflow.com/questions/38340078/how-to-decode-jwt-token) pour votre référence. –

+0

Malheureusement 'authResult.IdToken' est nul ... – user2297037