¿Cómo actualizar un reclamo en ASP.NET Identity?
Estoy usando la autenticación OWIN para mi proyecto MVC5. Este es miSignInAsync
private async Task SignInAsync(ApplicationUser user, bool isPersistent)
{
var AccountNo = "101";
AuthenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie);
var identity = await UserManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie);
identity.AddClaim(new Claim(ClaimTypes.UserData, AccountNo));
AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = isPersistent, RedirectUri="Account/Index"}, identity);
}
Como puedes ver, agreguéAccountNo
en la lista de reclamaciones.
Ahora, ¿cómo puedo actualizar este Reclamo en algún momento de mi solicitud? Hasta ahora, tengo esto:
public string AccountNo
{
get
{
var CP = ClaimsPrincipal.Current.Identities.First();
var Account= CP.Claims.FirstOrDefault(p => p.Type == ClaimTypes.UserData);
return Account.Value;
}
set
{
var CP = ClaimsPrincipal.Current.Identities.First();
var AccountNo= CP.Claims.FirstOrDefault(p => p.Type == ClaimTypes.UserData).Value;
CP.RemoveClaim(new Claim(ClaimTypes.UserData,AccountNo));
CP.AddClaim(new Claim(ClaimTypes.UserData, value));
}
}
cuando trato de eliminar el reclamo, obtengo esta excepción:
La reclamación 'http://schemas.microsoft.com/ws/2008/06/identity/claims/userdata: 101 'no se pudo eliminar. No es parte de esta Identidad o es un reclamo propiedad del Principal que contiene esta Identidad. Por ejemplo, el Principal será el propietario del reclamo al crear un GenericPrincipal con roles. Los roles se expondrán a través de la Identidad que se pasa en el constructor, pero que en realidad no es propiedad de la Identidad. Una lógica similar existe para un RolePrincipal.
¿Podría alguien ayudarme a descubrir cómo actualizar el Reclamo?