不同SP的多个属性-resolver.xml

Multiple attribute-resolver.xml for different SPs

我有不同的 SP 使用我的 IDP Shibboleth,但对于每个 SP,我想在 SAML 响应中发送不同的属性。

有办法实现吗? 也许使用不同的属性解析器文件,或者可能使用相同的文件,但在 AttributeDefinition 上进行一些配置,我可以设置这些配置,以便 shibboleth 知道要解析哪些值?

我在他们的 wiki 上没有找到任何关于此的内容。

我建议您查看 attribute mapping 的主题。有了这个,您可以在您的服务提供商上定义过滤器。收集 IDP 上所有 SP 所需的所有属性,然后过滤服务提供商所需的属性。

示例:SP 1 需要名为 email_1 的属性,SP 2 需要 email_2。 那么你的 attribute-resolver.xml 可能看起来像这样:

<AttributeDefinition xsi:type="Simple" id="email_1">
        <InputDataConnector ref="myDB" attributeNames="email_1"/>
        <AttributeEncoder xsi:type="SAML1String" name="urn:mace:dir:attribute-def:uid"/>
        <AttributeEncoder xsi:type="SAML2String" name="urn:oid:0.9.2342.19200300.100.1.3" friendlyName="email_1" encodeType="false"/>
    </AttributeDefinition>

<AttributeDefinition xsi:type="Simple" id="email_2">
        <InputDataConnector ref="myDB" attributeNames="email_2"/>
        <AttributeEncoder xsi:type="SAML1String" name="urn:mace:dir:attribute-def:uid2"/>
        <AttributeEncoder xsi:type="SAML2String" name="urn:oid:0.9.2342.19200300.100.1.4" friendlyName="email_2" encodeType="false"/>
    </AttributeDefinition>

<DataConnector id="myDB" xsi:type="RelationalDatabase">
        <SimpleManagedConnection jdbcDriver="com.mysql.jdbc.Driver"
                                 jdbcURL="jdbc:mysql://localhost:3306/login"
                                 jdbcUserName="bla"
                                 jdbcPassword="blabla"/>
        <QueryTemplate>
            <![CDATA[
                SELECT
                    mail_1,
                    mail_2
                FROM login
                WHERE
                    mail_1 = '$resolutionContext.principal'
            ]]>
        </QueryTemplate>
        <Column columnName="mail_1" attributeID="mail_1"/>
        <Column columnName="mail_2" attributeID="mail_2"/>
    </DataConnector>

然后,在 attribute-map.xml 中的服务提供商 1 上,您只过滤掉您需要的属性:

<Attribute name="urn:oid:0.9.2342.19200300.100.1.3" id="mail_1" />
<Attribute name="urn:mace:dir:attribute-def:uid" id="mail_1" />

因此,当 SP1 同时收到 mail_1mail_2 属性时,mail_2 将被拒绝,因为它不在您的 attribute-map.xml 文件中。