net mvc based authorized asp asp.net-mvc claims-based-identity

asp.net mvc - mvc - Identidad y Reclamaciones ASP.NET



authorized asp net mvc (2)

Con respecto a Asp.Net Identity, recomendaría encarecidamente la implementación de Brock Allen, llamada ''Reinicio de identidad''. El reinicio de identidad es básicamente un conjunto de extensiones a la identidad de ASP.NET. Se inspiró debido a las frustraciones con la implementación de Identidad de ASP.NET.

Puedes leer un artículo introductorio here . Puede descargar el código fuente y las muestras desde github here .

Puedes instalarlo usando nuget:

www.nuget.org/packages/BrockAllen.IdentityReboot/ www.nuget.org/packages/BrockAllen.IdentityReboot.Ef/ (for entity framework)

Estoy tratando de alejarme de WebForms y aprender MVC, específicamente utilizando el nuevo modelo de identidad ASP.NET. Sin embargo, parece que no puedo encontrar ninguna documentación formal de Microsoft que demuestre cómo crear un objeto de reclamaciones y almacenarlo en una base de datos para un usuario autenticado.

Mi sitio, tiene que hacer lo siguiente:

  1. Autenticación de un usuario - TICK
  2. Cree un Reclamo y almacene la información del usuario en él, de modo que pueda usarlo durante toda la sesión, sin necesidad de TICK
  3. Retire los roles de los usuarios de la nueva tabla de roles de ASP.NET - NO TICK

¿Alguien puede arrojar alguna luz sobre cómo se puede lograr esto?


Honestamente, todavía estoy aprendiendo las cuerdas con Identity, yo mismo. Es cierto que la documentación proporcionada por Microsoft podría ser mejor, pero nunca he encontrado ninguna de sus documentos tan útil. Lo mejor siempre viene de la comunidad, y desafortunadamente, la Identidad es todavía tan nueva que la comunidad ha tenido tiempo de concretarla aún.

Dicho esto, esto es lo que sé, con el entendimiento de que puede haber mejores formas de las que simplemente no estoy al tanto, todavía.

Reclamaciones

Su UserManager tiene tres métodos de importancia: GetClaimsAsync , AddClaimAsync y RemoveClaimAsync .

Para obtener todos los reclamos de un usuario:

var claims = await UserManager.GetClaimsAsync(userId);

Puede obtener la identificación del usuario actual con:

var userId = User.Identity.GetUserId();

Una vez que tenga las reclamaciones, para sacar una específica:

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

Donde "SomeClaimType" es el nombre de la reclamación tal como se agregó. En algunos escenarios, esto podría ser una URN completamente calificada, o simplemente podría ser una cadena simple. Si no es algo que usted agregó personalmente, lo mejor que puede hacer es simplemente inspeccionar la variable de claims durante una sesión de depuración para ver lo que realmente tiene allí.

Además, dado que la lista de reclamaciones es una consulta, puede hacer prácticamente cualquier consulta LINQ que desee, Where , Count , etc.

Para agregar un nuevo reclamo:

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

Y para eliminar un reclamo:

await UserManager.RemoveClaimAsync(userId, someClaim);

Roles

Los roles funcionan de manera similar. Para obtener todos los roles para un usuario:

var roles = await UserManager.GetRolesAsync(userId);

Para ver si un usuario está en un rol particular:

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

Para agregar un usuario a un rol particular:

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

Y para eliminar:

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

Agregar los roles en primer lugar es un poco diferente; Tienes que crear una instancia de RoleStore .

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

Luego, puedes usar eso para administrar todos los roles. Por ejemplo, para crear un nuevo rol:

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

Para eliminar:

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

Obtener todos los roles, no es posible con la API específica de Identidad en este momento, pero siempre puede recurrir a consultar con Entity Framework directamente:

var allRoles = context.Roles.OrderBy(o => o.Name);