Shibboleth
跳過未映射的 SAML 2.0 屬性,即使 name 和 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>
我們遇到了同樣的問題。顯然 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 的預設格式。
我希望這可以幫助您解決問題。