ASP.NET identité et réclamations

J'essaie de m'éloigner de WebForms et d'apprendre MVC, en utilisant spécifiquement le nouveau ASP.NET modèle D'identité. Cependant, je ne peux pas trouver de documentation formelle de Microsoft, qui montre comment créer un objet claims, et le stocker dans une base de données pour un utilisateur authentifié.

Mon site, doit faire ce qui suit:

  1. authentification d'un utilisateur-TICK
  2. créez une réclamation et stockez-y des informations utilisateur, afin que je puisse l'utiliser tout au long de la session-Non Cocher
  3. Retirez les rôles des utilisateurs du nouveau ASP.NET table des rôles - ne coche pas

Quelqu'un peut-il faire la lumière sur la façon dont cela peut être réalisé?

31
demandé sur CSharpNewBee 2014-02-13 22:05:09

2 réponses

Honnêtement, je suis encore en train d'apprendre les ficelles du métier avec L'identité, moi-même. Certes, la documentation fournie par Microsoft pourrait être meilleure, mais je n'ai jamais trouvé leur documentation aussi utile. Les meilleures choses viennent toujours de la communauté, et malheureusement, L'identité est encore si nouvelle que la communauté a eu le temps de vraiment l'étoffer encore.

Cela dit, Voici ce que je sais, étant entendu qu'il peut y avoir de meilleures façons dont je ne suis tout simplement pas au courant, encore.

Revendications

Votre UserManager a trois méthodes de signification: GetClaimsAsync, AddClaimAsync et RemoveClaimAsync.

Pour obtenir toutes les demandes d'un utilisateur:

var claims = await UserManager.GetClaimsAsync(userId);

Vous pouvez obtenir l'id de l'utilisateur actuel avec:

var userId = User.Identity.GetUserId();

Une fois que vous avez les revendications, pour en retirer une spécifique:

var someClaim = claims.FirstOrDefault(c => c.Type == "SomeClaimType");

Où "SomeClaimType" est le nom de la revendication telle qu'elle a été ajoutée. Dans certains scénarios, il peut s'agir d'une urne entièrement qualifiée ou d'une simple chaîne. Si ce n'est pas quelque chose que vous personnellement ajouté, la meilleure chose à faire est simplement d'inspecter la variable claims pendant une session de débogage pour voir ce que vous avez réellement là.

En outre, puisque la liste des revendications est interrogeable, vous pouvez faire à peu près tout ce que vous voulez sur LINQ, Where, Count, etc.

Pour ajouter une nouvelle revendication:

await UserManager.AddClaimAsync(userId, new Claim("SomeClaimType", claimValue));

Et pour supprimer une revendication:

await UserManager.RemoveClaimAsync(userId, someClaim);

Rôles

Rôles semblables. Pour obtenir tous les rôles d'un utilisateur:

var roles = await UserManager.GetRolesAsync(userId);

, Pour voir si un utilisateur est dans un rôle particulier:

var hasRole = await UserManager.IsInRoleAsync(userId, "SomeRole");

Pour ajouter un utilisateur À un rôle particulier:

await UserManager.AddToRoleAsync(userId, "SomeRole");

Et à supprimer:

await UserManager.RemoveFromRoleAsync(userId, "SomeRole");

Ajout de rôles en premier lieu est un peu différent; vous devez créer une instance de RoleStore.

var roleStore = new RoleStore<IdentityRole>(context);

Ensuite, vous pouvez l'utiliser pour gérer tous les rôles. Par exemple, pour créer un nouveau rôle:

await roleStore.CreateAsync(new IdentityRole("RoleName"));

Pour supprimer:

var identityRole = await roleStore.FindByNameAsync("RoleName");
await roleStore.DeleteAsync(identityRole);

Obtenir Tous les rôles n'est pas possible avec L'API spécifique à L'identité pour le moment, mais vous pouvez toujours revenir en arrière pour interroger directement avec Entity Framework:

var allRoles = context.Roles.OrderBy(o => o.Name);
86
répondu Chris Pratt 2014-02-13 19:17:27

Concernant Asp.Net identité, je recommanderais fortement L'implémentation de Brock Allen, appelée 'Identity Reboot'. Le redémarrage de l'identité est essentiellement un ensemble d'extensions ASP.NET identité. Il a été inspiré en raison de frustrations avec le ASP.NET mise en œuvre de L'identité.

Vous pouvez lire un article introductif ici. Vous pouvez télécharger le code source et les échantillons de github ici .

Vous pouvez l'installer en utilisant nuget:

www.nuget.org/packages/BrockAllen.IdentityReboot/
www.nuget.org/packages/BrockAllen.IdentityReboot.Ef/   (for entity framework)
5
répondu Panayiotis Hiripis 2014-11-10 09:26:04