【发布时间】:2014-07-08 18:13:50
【问题描述】:
我看到很多类似下面的代码来创建一个新的 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 中使用多个身份提供建议?
【问题讨论】:
-
它们不是重复的。一个是询问如何添加身份,一个是关于删除身份。类似,但涉及不同的考虑因素。
标签: c# asp.net-mvc authentication wif claims-based-identity