除了@Eugenio Pace 所说的之外,值得注意的是,您可以在IClaimsPrincipal 中添加和删除声明:
public static void UpdateClaims(IClaimsIdentity identity)
{
identity.Claims.Remove(identity.Claims.SingleOrDefault(x => x.ClaimType == ClaimTypes.Name));
identity.Claims.Remove(identity.Claims.SingleOrDefault(x => x.ClaimType == ClaimTypes.Email));
identity.Claims.Add(new Claim(ClaimTypes.Name, "Steve Smith"));
identity.Claims.Add(new Claim(ClaimTypes.Email, "steve@smith.com"));
}
UpdateClaims(User.Identity as IClaimsIdentity);
添加的声明可以是ClaimTypes 中列举的类型之一,也可以是您自己设计的自定义字符串。您可以添加多个 ClaimTypes.Role 类型的声明 - 我不确定其他类型。
来自ClaimsCollection 文档:
表示与单个主题相关联的声明集合。
将声明添加到 ClaimCollection 会隐式关联该声明
通过调用与集合关联的主题
SetSubject 方法。
从 ClaimCollection 中移除 Claim 会隐式移除 this
通过调用 SetSubject 方法进行关联。
http://msdn.microsoft.com/en-us/library/microsoft.identitymodel.claims.claimcollection.aspx
更新
对于.Net 4.5,身份类和更新声明的方法发生了变化,命名空间也发生了变化:
using System.IdentityModel;
using System.Security.Claims;
public static void UpdateClaims(Member member, ClaimsIdentity identity)
{
identity.RemoveClaim(identity.Claims.SingleOrDefault(x => x.Type == ClaimTypes.Name));
identity.RemoveClaim(identity.Claims.SingleOrDefault(x => x.Type == ClaimTypes.Email));
identity.AddClaim(new Claim(ClaimTypes.Name, "Steve Smith"));
identity.AddClaim(new Claim(ClaimTypes.Email, "steve@smith.com"));
}
UpdateClaims(User.Identity as ClaimsIdentity);
http://msdn.microsoft.com/en-us/library/system.security.claims.claimsidentity.aspx