我已经使用基于声明的indentity更新
var identity = new ClaimsIdentity(new[] {
new Claim(ClaimTypes.Name, userContext.ReturnObject.UserName),
new Claim(ClaimTypes.Email, userContext.ReturnObject.EmailAddress)
}, "ApplicationCookie");
我现在想更新存储要求的用户名应用的认证存储要求(System.Security.Claims)的值。
我可以用
var identity = (ClaimsIdentity)User.Identity;
IEnumerable<Claim> claims = identity.Claims;
读出的值,但我无法更新。请建议。
同时除去权利要求我正在一个错误“http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name:somename”无法删除。它不是这个身份的一部分,或者是由包含此身份的委托人拥有的一个声明。例如,在创建具有角色的GenericPrincipal时,Principal将拥有该声明。这些角色将通过在构造函数中传递的身份公开,但实际上并不属于身份。 RolePrincipal存在类似的逻辑。 – Rex 2015-03-19 13:14:00
啊,是的,ClaimsIdentity确实有“外部”声明的概念,正如错误信息所表明的那样,这些不能被改变。这使我们回到索赔身份不是真的意味着一旦发布就更新的事实。在这种情况下,使用更新后的用户名可能会更好地服务于生成新的委托人,从而有效地模仿用户的登录,但使用新的用户名。 – 2015-03-19 13:34:00
在生成新的委托人时会自动删除旧委托人 – Rex 2015-03-19 13:40:47