2011-09-23 139 views
10

我们的一位客户正在要求我们通过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?

+0

看看[Shibboleth](http://shibboleth.internet2.edu/)。 –

+0

@JaredFarrish:那里的软件似乎是基于Java的,我们被要求使用PHP来制造歇斯底里的葡萄干。如果你的意思是协议,它是由客户决定的;这两者是相关的,但我完全不相信它们完全兼容。很难说服一个真正的SAML包与客户的服务交谈。 – eswald

回答

3

SLO问题

想象一下这样的方案:

Plattform - SP1 ----- -----的IdP SP2 -----应用

Plattform和应用程序与连接simpleSAMLphp SP,它也与IdP形成联合。

你必须找到Platffom,APP1和APP2的正常注销功能,并把它改写:

normal_app_logout() { 

// code of the normal logout 
.... 
.... 

// new code 

require_once('<path-to-ssp>/simplesamlphp/lib/_autoload.php'); //load the _autoload.php 
$auth = new SimpleSAML_Auth_Simple('default-sp'); // or the auth source you using at your SP 
$auth->logout(); <--- call to the SLO 
} 

这将结束本地会话,连接到该应用程序中,IDP会话和SP会话SP会话的SP连接到IdP但是......其他应用会话发生了什么?他们仍然会积极。你想过一个积极的调用来结束它,但是我认为如果你也覆盖许多应用程序实现的“is_logged_in()”函数,它会更好。

您必须重写此功能,如果使用功能

$auth->isAuthenticated() 

最近我实现了对Wordpess SAML plugin此功能还存在有效的SP会话活跃,只有返回true,检查code

的IdP问题

使用Onelogin free trial,你可以在那里注册你的SP并使用它的IdP。按照这个guide to configure your SAML connectors

但我认为你最好可以尝试自己建立一个IdP。 有一个不错的documentation和步骤很容易。如果您不想浪费时间配置数据库/ ldap,请使用“example-userpass”authsource。

你也可以设置你的实际simplesamlphp实例为SP & IdP,但我认为如果你正在学习simplesamlphp更好不要混合。

相关问题