我已使用基于声明的身份
应用了身份验证 var identity = new ClaimsIdentity(new[] {
new Claim(ClaimTypes.Name, userContext.ReturnObject.UserName),
new Claim(ClaimTypes.Email, userContext.ReturnObject.EmailAddress)
}, "ApplicationCookie");
现在我正在尝试更新存储在声明中的用户名。
我可以使用
读取值var identity = (ClaimsIdentity)User.Identity;
IEnumerable<Claim> claims = identity.Claims;
但我无法更新。请建议。
答案 0 :(得分:1)
我不明白你为什么要更新索赔,但你可以尝试像Andy所说的这样的事情
((ClaimsIdentity)identity).RemoveClaim(identity.FindFirst(ClaimTypes.Name));
((ClaimsIdentity)identity).AddClaim(new Claim(ClaimTypes.Name, "new_name"));
答案 1 :(得分:0)
索赔并未设计为更新;他们打算成为关于身份的原子事实。但是,ClaimsIdentity类能够替换声明;您需要先找到要替换的声明,然后使用RemoveClaim从ClaimsIdentity中删除声明,然后使用AddClaim添加具有相同声明类型的替换声明。
答案 2 :(得分:0)
在完成@Andy和@Mukesh所说的内容后,您还需要在更新声明后更改身份验证Cookie,以使更改生效。
IOwinContext context = Request.GetOwinContext();
var authenticationContext = context.Authentication.AuthenticateAsync(DefaultAuthenticationTypes.ExternalCookie);
authenticationManager.AuthenticationResponseGrant = new AuthenticationResponseGrant(
identity,
authenticationContext.Properties);
可以找到更多信息here