3

我在这个设置中使用 wso2is 作为 idp 和 2 个应用程序作为 sp。其中一个应用程序使用 java、spring-security-saml-extension,另一个使用 php 和 simplesamlphp。SSO 运作良好,但我无法让 SLO 运作。

我要做的是:

  1. 登录两个 sp-s
  2. 在第一个 sp 中注销
  3. 观察 wso2 日志,看到 wso2 向第二个 sp 发送了 logoutrequest
  4. 第二个 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

4

2 回答 2

1

正如您在规范中发现的那样, Issuer 元素是强制性的。SP 使用它来识别发件人。如果没有它,SP 将不得不开始猜测是谁发送了消息,因为它可能同时连接到许多 IDP。该问题应作为错误报告给 wso。

于 2014-05-23T09:17:57.780 回答
1

这在即将发布的 Identity Server 5.1 版本中得到修复。
https://wso2.org/jira/browse/IDENTITY-2714

我目前正在使用 5.0.0 并最终修补了一些诸如此类的东西,以便我可以拥有我需要的功能。一旦你有了方向感,做起来还不错。您需要修补 carbon 平台 4.2.0 块 11 的 'identity' 模块中的 'org.wso2.carbon.identity.sso.saml' 组件。

于 2015-10-19T19:22:19.360 回答