我们正在尝试使用Shibboleth Identity Provider 3和1服务进行单一设置。
我们已将Shibboleth IDP3配置为使用我们正在运行的OpenLDAP服务。这是有效的,因为身份验证是成功的。 (见绿色下划线部分图像)。这是我们在LDAP中创建的用户名为' test'。
现在的问题是整个事务失败了,因为我们在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
答案 0 :(得分:2)
这可能有很多原因。我在您提供的配置中可以看到一些问题:
在 attribute-resolver.xml 中,您已将AttributeDefinition ID定义为id="googleNameID"
,而 saml-nameid.xml 中的AttributeSourceIDs则设置为{ {1}}。这些ID应该完全相同。将attribute-resolver.xml中的AttributeDefinition更改为:
p:attributeSourceIds="#{ {'mail'} }"
在 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>
您尚未定义任何属性过滤策略。将以下内容添加到 conf / attribute-filter.xml :
idp.nameid.saml2.default = urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress