gpt4 book ai didi

c# - 在 ClaimsPrincipal 中添加多个身份

转载 作者:行者123 更新时间:2023-11-30 17:47:30 24 4
gpt4 key购买 nike

我看到很多像下面这样的代码来创建一个新的 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 中使用多个身份提供建议?

最佳答案

有一个构造函数,它将为您完成:

public ClaimsPrincipal(IEnumerable<ClaimsIdentity> identities)

但是,它的语义是未定义的。到目前为止,Microsoft 还没有使用过它,我也从未能够将它序列化为可互操作的 SAML token ……我不确定 SesAM 将如何处理它。

关于c# - 在 ClaimsPrincipal 中添加多个身份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24638930/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com