web-dev-qa-db-fra.com

Utilisation correcte des types de revendications dans Owin Identity et Asp.Net MVC

J'utilise Owin et Identity et j'ai un problème avec Claims.

J'ai des applications où les utilisateurs utilisent un e-mail pour s'authentifier et d'autres qui utilisent un nom d'utilisateur.

  1. La méthode de connexion dans la couche de gestion peut accepter un e-mail ou un nom d'utilisateur selon le cas.

  2. Pour "obscurcir" l'identité de l'utilisateur, j'utilise un GUID, propre à chaque utilisateur, lors de l'affichage d'une page avec des informations utilisateur.

    J'utilise aussi ceci car parfois un email ou un nom d'utilisateur peut être un problème dans l'url ...

Lorsque je signe un utilisateur, j'ai les types de réclamations suivants:

new Claim(ClaimTypes.Email, user.Email),
new Claim(ClaimTypes.Name, user.FullName),
new Claim(ClaimTypes.GivenName, user.FirstName),
new Claim(ClaimTypes.Surname, user.LastName),
new Claim(ClaimTypes.NameIdentifier, user.UserUniqueIdentifier.ToString())

Mon interprétation est donc:

Email is the user's email

Name is the user's full name

GivenName is the user's first name

Surname is the user's last name

NameIdentifier is the user's unique identifier ... It can be the email, the username or in this case I am using an Unique ID.

Ce qui est étrange, c'est qu'il n'y a pas de type de revendication pour le nom d'utilisateur. Où le placerait-il?

Fondamentalement, il semble qu'il y ait un problème lorsqu'un nom d'utilisateur n'est pas utilisé comme identifiant de nom unique, mais qu'il est toujours nécessaire.

Quelque chose ne va pas avec mes types de revendications logiques?

23
Miguel Moura

ClaimTypes.Name (http: // schemas.xmlsoap.org/ws/2005/05/identity/claims/name) doit être utilisé pour le nom d'utilisateur.

ClaimTypes.NameIdentifier est généralement utilisé pour l'ID de l'utilisateur. Dans certains cas, il peut s'agir d'un nom d'utilisateur.

ASP.NET Identity utilise ClaimTypes.Name pour stocker le nom d'utilisateur et ClaimTypes.NameIdentifier pour stocker la clé primaire GUID de l'utilisateur.

33
Anthony Chu

Si vous examinez les retours de Facebook ou Google de oAuth vous verrez que ClaimTypes.Name est ClaimTypes.GivenName + ClaimTypes.Surname. LinkedIn revient ensuite concaténé et je pense que c'est un bug car j'ai un nom d'utilisateur complètement différent. Twitter renvoie le nom d'utilisateur pour ClaimTypes.Name, mais Twitter est un cas particulier et ils ne renvoient même pas de courrier électronique.

Tous utilisent un identifiant numérique opaque pour ClaimTypes.NameIdentifier. Et ils utilisent leurs propres noms de chaîne, commençant généralement par urn:facebook:link, urn:google:profile, etc. pour les données personnalisées.

Le modèle d'identité Asp.NET utilise UserName pour ClaimTypes.Name. L'essentiel est que ClaimTypes.Name est utilisé différemment dans la pratique. Vous pouvez ajouter n'importe quel nom de revendication sous forme de chaîne et ajouter le urn:... schéma pour le rendre non ambigu.

9
V.B.