Shibboleth

跳過未映射的 SAML 2.0 屬性,即使 name 和 nameFormat 匹配

  • February 2, 2020

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跳過,當它namenameFormat匹配?

我注意到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>

我們遇到了同樣的問題。顯然 Shibboleth 不能混合 SAML 1 和 SAML 2 的格式。您必須按如下方式使用它們(https://wiki.shibboleth.net/confluence/display/SHIB2/NativeSPAddAttribute):

  • SAML 1:

    • 甕:狼牙棒:shibboleth:1.0:attributeNamespace:uri (預設)
    • 如果您想用另一種格式(但不是 SAML 2 格式)映射屬性,則必須使用 nameFormat 屬性在屬性映射中指定它。
  • SAML 2:

    • urn:oasis:names:tc:SAML:2.0:attrname-format:uri (預設)
    • urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified (預設)
    • 如果您想用另一種格式(但不是 SAML 1 格式)映射屬性,則必須使用 nameFormat 屬性在屬性映射中指定它。

因此,您遇到的問題是您收到一條 SAML 2 消息,其屬性使用 SAML 1 格式並且 Shibboleth 不支持,即使您明確告訴 Shibboleth 使用 nameFormat 屬性使用 SAML1 格式。

我們通過要求 PingFederate IdP 團隊使用 SAML 2“urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified”格式向我們發送屬性解決了這個問題(因為這顯然是一種易於PingFederate 中的支持)。在我們的屬性映射中,我們不使用 nameFormat 屬性,因為這種格式是 Shibboleth 的預設格式。

我希望這可以幫助您解決問題。

引用自:https://serverfault.com/questions/790521