我看到很多以下代码用于创建新的ClaimsIdentity和ClaimsPrincipal:
var claims = new List<Claim>() {
new Claim(ClaimTypes.Name, "Me"),
new Claim(ClaimTypes.Email, "email@me.com"),
new Claim(ClaimTypes.Role, "Admin")
};
var id = new ClaimsIdentity(claims, "Forms");
var principal = new ClaimsPrincipal(id);
这很简单,网络上有很多关于如何做到这一点的示例。我想做的是,在ClaimsPrincipal中拥有多个身份,但我没有找到太多关于这方面的文档。如下所示,ClaimsPrincipal被定义为可以支持多个身份,因此这是可行的。
public class ClaimsPrincipal : IPrincipal
{
public virtual IEnumerable<ClaimsIdentity> Identities { get; }
...
}
我认为上述的声明var principal = new ClaimsPrincipal(id) 的方法是不够充分的,因为我需要能够向已经有身份的ClaimsPrincipal添加一个新的身份。那么,如果您已经在ClaimsPrincipal中具有身份,并声明了一个新的ClaimsPrincipal实例,会发生什么情况?现在您是否拥有两个具有不同身份的ClaimsPrincipal实例?我的直觉是这种情况确实如此,因此我需要检查当前ClaimsPrincipal的存在并像这样添加:
ClaimsPrincipal principal;
if(System.Security.Claims.ClaimsPrincipal.Current != null)
{
principal = System.Security.Claims.ClaimsPrincipal.Current;
principal.AddIdentity(id)
}
else
{
principal = new ClaimsPrincipal(id);
}
我是否在正确的道路上?有没有人能够深入了解当ClaimsPrincipal中存在多个身份时,在幕后发生了什么。如果我不是在正确的轨道上,能否提供关于如何在ClaimsPrincipal中使用多个身份的建议?