跳过未映射的 SAML 2.0 属性,即使名称和 nameFormat 匹配

跳过未映射的 SAML 2.0 属性,即使名称和 nameFormat 匹配

SP 运行 Shibboleth 2.5.6。对于一个特定的 IdP,我有以下属性映射:

<Attribute name="role"
    nameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified"
    id="role" />
<Attribute name="urn:mace:dir:attribute-def:givenName"
    nameFormat="urn:mace:shibboleth:1.0:attributeNamespace:uri"
    id="givenName" />

我收到一封电报,内容如下:

<AttributeStatement>
    <Attribute Name="role" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified">
        <AttributeValue xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">Educator</AttributeValue>
    </Attribute>
    <Attribute Name="urn:mace:dir:attribute-def:givenName" NameFormat="urn:mace:shibboleth:1.0:attributeNamespace:uri">
        <AttributeValue xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">intraguest</AttributeValue>
    </Attribute>
</AttributeStatement>

记录如下:

Shibboleth.AttributeExtractor.XML : creating mapping for Attribute role, Format/Namespace:urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified
Shibboleth.AttributeExtractor.XML : creating mapping for Attribute urn:mace:dir:attribute-def:givenName
...
DEBUG Shibboleth.AttributeDecoder.String [1]: decoding SimpleAttribute (role) from SAML 2 Attribute (role) with 1 value(s)
INFO Shibboleth.AttributeExtractor.XML [1]: skipping unmapped SAML 2.0 Attribute with Name: urn:mace:dir:attribute-def:givenName, Format:urn:mace:shibboleth:1.0:attributeNamespace:uri

givenName当其匹配时,name为什么被跳过nameFormat

我注意到Format/Namespace“创建映射”日志行中缺少注释givenName,但我推测这是因为给定的nameFormat与默认值匹配。


更新:

IdP 是 PingFederate 源,其元数据声明符合 SAML 2。以下是元数据的相关摘录:

<md:EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata" ID="..." entityID="...">
    <md:IDPSSODescriptor protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
        <saml:Attribute xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" Name="urn:mace:dir:attribute-def:givenName" NameFormat="urn:mace:shibboleth:1.0:attributeNamespace:uri"/>
        <saml:Attribute xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" Name="role" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified"/>
    </md:IDPSSODescriptor>
</md:EntityDescriptor>

答案1

我们遇到了同样的问题。显然 Shibboleth 不能混合 SAML 1 和 SAML 2 的格式。您必须按如下方式使用它们 (https://wiki.shibboleth.net/confluence/display/SHIB2/NativeSPAddAttribute):

  • SAML 1:
    • urn:mace:shibboleth:1.0:属性名称空间:uri(默认)
    • 如果您想要映射具有另一种格式(但不是 SAML 2 格式)的属性,则必须使用 nameFormat 属性在属性映射中指定它。
  • SAML 2:
    • urn:oasis:names:tc:SAML:2.0:attrname-format:uri(默认)
    • urn:oasis:names:tc:SAML:2.0:属性名称格式:未指定(默认)
    • 如果您想要映射具有另一种格式(但不是 SAML 1 格式)的属性,则必须使用 nameFormat 属性在属性映射中指定它。

因此,您遇到的问题是,您收到的 SAML 2 消息具有使用 SAML 1 格式的属性,而 Shibboleth 不支持该格式,即使您使用 nameFormat 属性明确告诉 Shibboleth 使用 SAML1 格式。

我们通过要求 PingFederate IdP 团队使用 SAML 2“urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified”格式向我们发送属性(因为该格式显然在 PingFederate 中很容易支持)解决了这个问题。在我们的属性映射中,我们不使用 nameFormat 属性,因为该格式是 Shibboleth 的默认格式。

我希望这能帮助你解决问题。

相关内容