2014-09-03 46 views
0

我正在测试使用WSO2 Identity Server 5.0.0和两个PHP应用程序实例作为服务提供商(使用onelogin phpsaml)的SAML SSO。我设法让单点登录工作,但现在我面临单点登出的问题。WSO2 IS单一注销部分工作

  1. 当我触发来自PHPApp1退出请求,WSO2 IDP响应 与注销响应,似乎工作正常;
  2. WSO2 IDP触发saml会话参与者的注销请求,在本例中为PHPApp2;
  3. PHPApp2处理注销请求并使用LogoutResponse重定向到WSO2 IDP注销URL;
  4. 而现在的问题:WSO2似乎并不在记录以下信息,以处理来自PHPApp2和图案注销响应:

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,以获取有关该问题的更多详细信息,但我没能获得任何有用的信息。

有什么方法可以获得有关此问题的更多详细信息?

欢迎任何帮助。

回答

1

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

+0

感谢您的解释! – Michael 2014-09-05 09:14:11

0

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

我改变了代码来返回响应,而现在它正在工作。考虑到我是SAML标准的新手,我不确定它是否是解决这个问题的正确方法。

+0

你是怎么做到的?我有同样的问题,我使用simplesamlphp作为SP – rsabir 2016-04-28 13:48:41

0

WSO2 IS与强大的假设一起工作,服务器可以互相看到和交谈。通过这种方式,它会试图礼貌地发送退出请求(服务器到服务器,而无需用户参与)。作为响应,SP应该发回有效的注销响应。WSO2 IS当前仅检查HTTP状态码(200)。

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

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

Gabriel