php - 是否有一个好的 SimpleSAMLphp SLO 示例?

标签 php logout saml

我们的一位客户要求我们通过 SAML 实现单一注销 (SLO)。他们的 SAML 服务端是身份提供者,而我们的是服务提供者。单点登录 (SSO) 的工作原理是使用客户端的 IdP 验证用户的凭证,然后将用户重定向到另一个平台上的登录页面,并使用允许他们直接登录的 token 。该平台对 SAML 完全一无所知,并且在特别是不共享 SimpleSAMLphp session 状态。

不过,注销需要通过两种方式进行:

  • 如果用户点击我们平台上的注销按钮,需要让他们退出我们的网站,并点击 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 session 所必需的,那很好,但我需要知道如何加入将用户从我们的平台注销所需的额外重定向。

我尝试搜索示例,但我得到的只是 API 引用。如果知道我如何在不尝试设置自己的 IdP 的情况下测试注销,那将是一件好事;是否有像 openidp.feide.no 这样处理 SLO 和 SSO 的服务?

最佳答案

SLO 问题

想象一下这个方案:

平台 -- SP1 ----- IdP ----- SP2 ----- 应用

Plattform 和 Apps 与 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 
}

这将结束本地 session 、连接到此应用程序的 SP session 、IdP session 以及连接到 IdP 的 SP 的 SP session 但是...其他应用程序 session 会怎样?他们仍然会活跃。您考虑过主动调用来结束它,但我认为如果您还覆盖许多应用程序实现的“is_logged_in()”函数会更好。

您必须覆盖此函数,并且仅当存在使用该函数的有效 SP session 时才返回 true

$auth->isAuthenticated()

最近我在 Wordpess SAML plugin 上实现了这个功能, 检查 code

IdP 问题

使用Onelogin free trial ,您可以在那里注册您的 SP 并使用其 IdP。关注这个guide to configure your SAML connectors

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

您也可以将实际的 simplesamlphp 实例设置为 SP 和 IdP,但我认为如果您正在学习 simplesamlphp,最好不要混用。

关于php - 是否有一个好的 SimpleSAMLphp SLO 示例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7532490/

相关文章:

php - mysql 匹配查询

ios - 如何正确注销并继续到 View Controller ?

ios - 用户注销时返回到初始 View Controller

php - SimpleSAMLphp IDP、SP、MediaWiki

saml - Keycloak 使用 SAML 注销

php - 将 mysql 查询包装在 php 函数中并打印结果

php - 使用sql过滤最新评论

php - 为 wordpress 设计主题的最佳方法,需要一些建议

grails - Spring-security-cas 插件单点注销不起作用

saml - ADFS 2.0 是否支持 SAML 1.1 协议(protocol)和 Web SSO 配置文件?