我们的一位客户正在要求我们通过SAML实施单一登出(SLO)。他们在SAML服务方面是身份提供者,而我们是服务提供者。单点登录(SSO)通过使用客户端的IdP验证用户的凭证,然后将用户重定向到另一个平台上的登录页面,使用令牌直接登录的令牌进行工作。该平台对SAML一无所知,并且特别不共享SimpleSAMLphp会话状态。有没有一个很好的SimpleSAMLphp SLO例子?
注销需要发生两种方式,虽然:
如果用户点击我们的平台上注销按钮,需要登录出来我们的网站的,并击中的IdP的SLO服务。
如果用户在客户端或其他服务提供商一侧点击注销按钮,客户端IdP将触及我们的SP的SLO服务,然后在将用户重定向回来之前需要将其注销出我们的真实平台到SP的注销响应页面。
我能说服我们的平台将用户重定向到注销的任意页面,所以我觉得第一部分可以通过使用SimpleSAML_Auth_Simple::getLogoutURL()
一个页面来实现。
这样的页面在IdP端点击时也可能工作,但SAML规格很复杂,我们无法确定,直到我们尝试。但是,config/authsources.php
中的SP配置不接受SingleLogoutService
参数; /www/module.php/saml/sp/metadata.php/entityid
生成的元数据仍然列出/www/module.php/saml/sp/saml2-logout.php/entityid
作为SingleLogoutService位置。如果该页面对于清除SimpleSAMLphp会话是必要的,那很好,但我需要知道如何避免将用户从我们的平台登出所需的额外重定向。
我试过寻找例子,但我得到的只是API参考。我也很高兴知道如何在不尝试设置自己的IdP的情况下测试注销。是否有像openidp.feide.no
这样的服务可以处理SLO和SSO?
看看[Shibboleth](http://shibboleth.internet2.edu/)。 –
@JaredFarrish:那里的软件似乎是基于Java的,我们被要求使用PHP来制造歇斯底里的葡萄干。如果你的意思是协议,它是由客户决定的;这两者是相关的,但我完全不相信它们完全兼容。很难说服一个真正的SAML包与客户的服务交谈。 – eswald