Cómo agregar reclamos en ASP.NET Identity

Estoy tratando de encontrar un documento o ejemplo de cómo agregaría reclamos personalizados a la identidad del usuario en MVC 5 utilizando ASP.NET Identity. El ejemplo debe mostrar dónde insertar las reclamaciones en la canalización de seguridad de OWIN y cómo persistirlas en una cookie mediante la autenticación de formularios.

Quizás el siguiente artículo puede ayudar:

var claims = new List(); claims.Add(new Claim(ClaimTypes.Name, "Brock")); claims.Add(new Claim(ClaimTypes.Email, "brockallen@gmail.com")); var id = new ClaimsIdentity(claims,DefaultAuthenticationTypes.ApplicationCookie); var ctx = Request.GetOwinContext(); var authenticationManager = ctx.Authentication; authenticationManager.SignIn(id); 

El lugar correcto para agregar reclamos, suponiendo que está utilizando la plantilla del proyecto ASP.NET MVC 5, está en ApplicationUser.cs . Simplemente busque Add custom user claims here . Esto lo llevará al método GenerateUserIdentityAsync . Este es el método que se llama cuando el sistema de identidad ASP.NET ha recuperado un objeto ApplicationUser y necesita convertirlo en una ClaimsIdentity. Verás esta línea de código:

 // Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie); 

Después de eso es el comentario:

 // Add custom user claims here 

Y finalmente, devuelve la identidad:

 return userIdentity; 

Por lo tanto, si desea agregar un reclamo personalizado, su GenerateUserIdentityAsync podría ser algo así como:

 // Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie); // Add custom user claims here userIdentity.AddClaim(new Claim("myCustomClaim", "value of claim")); return userIdentity; 

Si desea agregar reclamos personalizados en el momento de la inscripción, este código funcionará:

  var user = new ApplicationUser { UserName = model.UserName, Email = model.Email }; var result = await UserManager.CreateAsync(user, model.Password); // Associate the role with the new user await UserManager.AddToRoleAsync(user.Id, model.UserRole); // Create customized claim await UserManager.AddClaimAsync(user.Id, new Claim("newCustomClaim", "claimValue")); if (result.Succeeded) {...etc