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.
La méthode de connexion dans la couche de gestion peut accepter un e-mail ou un nom d'utilisateur selon le cas.
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?
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.
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.