我在我的 MVC5项目中使用 OWIN 身份验证。
这是我的 SignInAsync
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);
}
如您所见,我将 AccountNo
添加到索赔列表中。
现在,我如何在应用程序的某个时刻更新这个声明:
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));
}
}
当我试图删除索赔,我得到这个例外:
索赔 'http://schemas.microsoft.com/ws/2008/06/identity/claims/userdata: 101’无法被删除。它要么不是这个的一部分 标识或由主体拥有的声明,其中包含 例如,在下列情况下,委托人将拥有该项申索: 创建一个包含角色的 GenericPrime。这些角色将被公开 通过构造函数中传递的标识,但不包含 类似的逻辑存在于 角色校长。
如何删除和更新索赔?