Shibboleth没有将任何nameid附加到SAML响应中

时间:2016-03-16 15:31:05

标签: saml-2.0 shibboleth

我们正在尝试使用Shibboleth Identity Provider 3和1服务进行单一设置。

我们已将Shibboleth IDP3配置为使用我们正在运行的OpenLDAP服务。这是有效的,因为身份验证是成功的。 (见绿色下划线部分图像)。这是我们在LDAP中创建的用户名为' test'。

enter image description here

现在的问题是整个事务失败了,因为我们在SAML响应中似乎缺少一个nameid。

我们已多次尝试解决此问题,以下是我们尝试的一些更改。

在attribute-resolver-ldap.xml中,我们添加了:

<resolver:AttributeDefinition id="mail" xsi:type="ad:Simple" sourceAttributeID="mail">
    <resolver:Dependency ref="myLDAP" />
    <resolver:AttributeEncoder xsi:type="enc:SAML1String" name="urn:mace:dir:attribute-def:mail" encodeType="false" />
    <resolver:AttributeEncoder xsi:type="enc:SAML2String" name="urn:oid:0.9.2342.19200300.100.1.3" friendlyName="mail" encodeType="false" />
</resolver:AttributeDefinition>

在attribute-resolver.xml中,我们添加了一个attributedefinition和一个dataconnector,如下所示:

<!--
   Attribute definition that expects to get the 'email' attribute from the ldap connector
   defined as its dependency and encode it as a SAML 2 name identifier.
-->
<resolver:AttributeDefinition xsi:type="Simple" xmlns="urn:mace:shibboleth:2.0:resolver:ad"
                              id="googleNameID"
                              sourceAttributeID="cn">

    <!--
       The data connector expected to provide the source attribute, email.  Note how the
       value of the 'ref' attribute is the identifier given to the LDAP data connector.
    -->
    <resolver:Dependency ref="ldap" />

    <!-- Encoder that transforms the attribute into a SAML2 NameID -->
    <resolver:AttributeEncoder xsi:type="SAML2StringNameID" xmlns="urn:mace:shibboleth:2.0:attribute:encoder"
                               nameFormat="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress" />

</resolver:AttributeDefinition>

dataconnector(&lt; ..&gt;值正确填写):

<!-- An LDAP connector that pulls in, at least, an attribute called email. -->
<resolver:DataConnector xsi:type="LDAPDirectory" xmlns="urn:mace:shibboleth:2.0:resolver:dc"
                        id="ldap"
                        ldapURL="ldap://localhost:389"
                        baseDN="dc=<FIRSTDC>,dc=<SECONDDC>"
                        principal="cn=admin,dc=<FIRSTDC>,dc=<SECONDDC>"
                        principalCredential="<PASS>">

    <FilterTemplate>
        <![CDATA[
            (cn=test)
        ]]>
    </FilterTemplate>
</resolver:DataConnector>

在saml-nameid.xml文件中,我们添加了一个nameIDgenerator(我们为SAML1和2执行了此操作):

<bean parent="shibboleth.SAML2AttributeSourcedGenerator"
            p:format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress"
            p:attributeSourceIds="#{ {'mail'} }" />

在我们的ldap.properties文件中,我们假设我们已经正确配置了所有内容,因为身份验证本身工作正常。

服务方面的错误是它无法处理SAML消息:

Caused by: org.opensaml.common.SAMLException: NameID element must be present as part of the Subject in the Response message, please enable it in the IDP configuration

1 个答案:

答案 0 :(得分:2)

这可能有很多原因。我在您提供的配置中可以看到一些问题:

  1. attribute-resolver.xml 中,您已将AttributeDefinition ID定义为id="googleNameID",而 saml-nameid.xml 中的AttributeSourceIDs则设置为{ {1}}。这些ID应该完全相同。将attribute-resolver.xml中的AttributeDefinition更改为:

    p:attributeSourceIds="#{ {'mail'} }"
  2. conf / saml-nameid.properties 中,取消注释并将默认NameID设置为EmailAddress,如下所示:

    <resolver:AttributeDefinition xsi:type="Simple" xmlns="urn:mace:shibboleth:2.0:resolver:ad"
                              id="mail" sourceAttributeID="cn">
        <resolver:Dependency ref="ldap" />
        <resolver:AttributeEncoder xsi:type="enc:SAML2String" name="mail" friendlyName="mail"/>
    </resolver:AttributeDefinition>
    
  3. 您尚未定义任何属性过滤策略。将以下内容添加到 conf / attribute-filter.xml

    idp.nameid.saml2.default = urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress