WSO2 IS Single Logout部分工作

时间:2014-09-03 11:22:17

标签: logout saml-2.0 wso2is

我正在使用WSO2 Identity Server 5.0.0测试SAML SSO,其中两个PHP应用程序实例作为服务提供者(使用onelogin phpsaml)。我设法使单点登录工作,但现在我遇到单点注销问题。

  1. 当我从PHPApp1触发注销请求时,WSO2 IDP会响应 退出响​​应,似乎工作正常;
  2. WSO2 IDP触发对saml会话参与者的注销请求,在本例中为PHPApp2;
  3. PHPApp2处理注销请求并使用LogoutResponse重定向到WSO2 IDP注销网址;
  4. 现在问题是:WSO2似乎没有处理来自PHPApp2的注销响应,并在日志中打印以下消息:
  5.   

    WARN {org.wso2.carbon.identity.sso.saml.logout.LogoutRequestSender} - 来自http://php-app2.dev/saml/sls的单一退出响应失败,状态代码暂时移动{org.wso2.carbon.identity.sso.saml。 logout.LogoutRequestSender}

    之后,WSO2继续尝试向PHPApp2发送注销请求,最后得到以下消息:

      

    错误{org.wso2.carbon.identity.sso.saml.logout.LogoutRequestSender} - 以毫秒为单位以60000的时间间隔重试5次后,单次注销失败。 {org.wso2.carbon.identity.sso.saml.logout.LogoutRequestSender}

    我尝试在WSO2中启用调试日志以获取有关该问题的更多详细信息,但我无法获得任何有用的信息。

    有没有办法获得有关此问题的更详细信息?

    欢迎任何帮助。

4 个答案:

答案 0 :(得分:2)

Michael,在SAML Single Logout实现中,当PHPApp1启动注销时,它会将用户重定向到WSO2 IDP。然后WSO2 IDP验证LogoutRequest消息,在成功验证后,WSO2 IDP计算出现有的会话参与者(在这种情况下,WSO2 IDP将检测PHPApp2)。因此,在考虑会话参与者之后,WSO2 IDP将以无状态方式(无浏览器参与)发送注销请求,并且会话参与者(PHPApp2)应验证来自WSO2 IDP的注销请求,并应发回注销响应(无浏览器) WSO2国内流离失所者参与,没有重定向。在WSO2 IDP从所有会话参与者接收到所有LogoutResponses之后,WSO2 IDP将它的退出响应收缩到作为PHPApp1的发起者,这将作为浏览器重定向(HTTP表单提交)发送。

答案 1 :(得分:1)

嗯,问题是由于onelogin / php-saml实现通过将响应重定向到IDP来处理IDP Logout请求。

我更改代码以返回响应,现在它正在运行。考虑到我是SAML标准的新手,我不确定这是否是解决问题的正确方法。

答案 2 :(得分:0)

WSO2 IS使用强大的假设,服务器可以看到并相互通信。这样它就会尝试礼貌并在反向通道上发送注销请求(服务器到服务器而无需用户参与)。作为响应,SP应该发回有效的注销响应。 WSO2 IS当前仅检查HTTP状态代码(200)。

SimpleSAMLphp适用于用户浏览器(并假设请求来自用户),并且在收到注销请求后,它尝试使用重定向绑定将用户重定向到带有SAML响应的IDP。它发出了HTTP 302响应。

尝试配置SimpleSAMLphp以使用POST绑定进行注销(在saml20-idp-remote.php中)。仍然 - SimpleSAMLphp它可能会在返回带有注销响应的表单之前尝试重定向用户,而WSO2 IS将不会遵循重定向。

加布里埃尔

答案 3 :(得分:0)

确保您使用的是数据库类型会话存储。

当SimpleSAMLphp直接从远程服务器接收LogoutRequest而不是通过浏览器重定向时,它可以在没有浏览器上下文的情况下终止会话。