Loupe

OpenIddict : comment ajouter facilement un claim ?

J'ai déjà consacré une longue série sur OpenIddict et cet article est une petite astuce qui vient y faire suite. Nous allons voir comment ajouter un claim au jeton créé pour le retrouver facilement sur l'utilisateur de l'HttpContext.

Ajouter des informations peut être très pratique car cela nous permet d'accéder facilement aux informations de l'utilisateur comme par exemple son mail : 

 var email = _httpContextAccessor.HttpContext.User
                    . FindFirstValue(ClaimTypes.Email);

Pour rappel, il faut créer un ticket d'authentification dans le controller qui échange un token : 

// Create a new authentication ticket holding the user identity.
var ticket = new AuthenticationTicket (
    principal,
    properties,
    OpenIdConnectServerDefaults.AuthenticationScheme);

Vous allez pouvoir trouver sur internet des solutions assez complexes à mettre en place pour ajouter un claim à votre principal. La plus propre et la plus répandue étant d'implémenter IUserClaimsPrincipalFactory comme décrit dans cet article (en anglais).

En réalité, avec OpenIddict c'est beaucoup plus simple. Il suffit d'ajouter cette ligne avant la création du ticket : 

((ClaimsIdentity)principal.Identity)
  .AddClaim(new Claim(ClaimTypes.Email, user.Email));

Attention cependant, l'email ou le claim ajouté se retrouvera dans le jeton final - c'est normal, c'est ce qu'on cherche à faire, mais on aurait pu penser que cela ne sortirait pas de l'Api :

Capture d’écran 2020-06-24 à 21.55.55.png

 

PS : merci Laurent pour la mise en oeuvre et les tests :)

Photo de profil

Ces billets pourraient aussi vous intéresser

Vous nous direz ?!

Commentaires

comments powered by Disqus