我正在使用TestWebAppCore ITfoxtec项目在ASP.NET Core中创建一个示例SAML2客户端应用程序.使用上面列出的GitHub存储库下的模板,我能够检索并显示索赔.但是,我无法正确解析和显示作为字符串列表发送的声明.

以下是使用SAML跟踪的该属性的示例结果.

<saml2:Attribute 
       FriendlyName="memberOf" 
       Name="memberOf" 
       NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
       <saml2:AttributeValue>test1</saml2:AttributeValue>
       <saml2:AttributeValue>test2</saml2:AttributeValue>
       <saml2:AttributeValue>test3</saml2:AttributeValue>
       <saml2:AttributeValue>test4</saml2:AttributeValue> 
</saml2:Attribute>

在这里我们可以看到,传入的属性有一个键(MemberOf)和四个值.使用TestWebAppCore模板的ClaimsTranform.cs文件中的CreateClaimsain(ClaimsCompany IncomingRule)方法解析声明将把它转换为一个list().

private static ClaimsPrincipal CreateClaimsPrincipal(ClaimsPrincipal incomingPrincipal)
{
    var claims = new List<Claim>();

    // All claims
    claims.AddRange(incomingPrincipal.Claims);
    // Or custom claims
    //claims.AddRange(GetSaml2LogoutClaims(incomingPrincipal));
    //claims.Add(new Claim(ClaimTypes.NameIdentifier, GetClaimValue(incomingPrincipal, ClaimTypes.NameIdentifier)));

    return new ClaimsPrincipal(new ClaimsIdentity(claims, incomingPrincipal.Identity.AuthenticationType, ClaimTypes.NameIdentifier, ClaimTypes.Role) {
    BootstrapContext = ((ClaimsIdentity)incomingPrincipal.Identity).BootstrapContext
    }); 

有没有一种方法可以正确地解析作为字符串列表传入的属性?

推荐答案

SAML 2.0支持多次使用相同的声明或声明中的值列表. 但当.NET传递声明时,它们总是作为只有一个值的声明列表传递.因此,有可能有重复的主张.

如果需要,您需要自己在后面对索赔进行分组.

Csharp相关问答推荐

为什么xslWriter不总是按照xslWriterSet中指定的格式格式化该文档?

如何使用C#中的图形API更新用户配置文件图像

EF Core 8—应用客户端投影后无法转换集操作

哪个nuget包含SecurityStampValidatorOptions

EF Core. Income和. AsNoTracking正确用法

JsonSerializer.Deserialize<;TValue>;(String,JsonSerializerOptions)何时返回空?

用C#从Word文档中删除重复的节控件和文本内容控件

在C#中,非静态接口方法的抽象和虚拟是冗余的吗?

具有可空类型的C#NOTNULL约束具有意外行为

为什么方法的值在SELECT方法中不会更改?

GODOT 4向C#中的字符串参数发送信号以等待

泛型参数在.NET 8 AOT中没有匹配的批注

如何返回具有泛型的类?

如何在Akka.NET中重新启动执行元时清除邮箱

单元测试类型为HttpClient with Microsoft.Extensions.Http.Resilience

SignalR跨域

为什么Visual Studio 2022建议IDE0251将我的方法设置为只读?

如何处理ASP.NET Core中包含两个构造函数的控制器?

我什么时候不应该在Dispose中调用EgSuppressFinalize(This)?

Windows 10上埃及标准时间的时区偏移不正确