我在这个设置中使用 wso2is 作为 idp 和 2 个应用程序作为 sp。其中一个应用程序使用 java、spring-security-saml-extension,另一个使用 php 和 simplesamlphp。SSO 运作良好,但我无法让 SLO 运作。
我要做的是:
- 登录两个 sp-s
- 在第一个 sp 中注销
- 观察 wso2 日志,看到 wso2 向第二个 sp 发送了 logoutrequest
- 第二个 sp 无法读取 logoutrequest
simplesamlphp 错误信息:
SimpleSAML_Error_BadRequest: BADREQUEST('%REASON%' => 'Received message on logout endpoint without issuer.')
由 idp 发出的 saml2 LogoutRequest:
<?xml version="1.0" encoding="UTF-8"?>
<saml2p:LogoutRequest ID="ljknoccfdhjcgelcpmbicffooeokboficpggcmpi" IssueInstant="2014-04-08T06:45:19.944Z" NotOnOrAfter="2014-04-08T06:50:19.944Z" Reason="urn:oasis:names:tc:SAML:2.0:logout:user" Version="2.0" xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol">
<saml2:NameID Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity" xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion">EXAMPLE.AT/test01@domain.com</saml2:NameID>
<saml2p:SessionIndex>5f14fc6e-1c31-42e1-b7c2-e1501bf400a8</saml2p:SessionIndex
</saml2p:LogoutRequest>
下面的 saml2 SLO-Profile 规范在第 4.4.4 章第 1294 行中明确指出:
<Issuer> 元素必须存在并且必须包含请求实体的唯一标识符
据我了解,作为 Idp 的 wso2is 应该是此处的颁发者,但它未能在消息中包含其 ID。
关于我做错了什么的任何提示?我无法想象这是一个 wso2is 错误!
http://docs.oasis-open.org/security/saml/v2.0/saml-profiles-2.0-os.pdf