微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

有没有一个很好的SimpleSAMLphp SLO示例?

我们的客户之一是要求我们通过SAML实现单一注销(SLO).他们的SAML服务是身份提供者,而我们的服务提供商.单点登录(SSO)通过使用客户端的IdP验证用户的凭据,然后将用户重定向到另一个平台上的登录页面,并使用令牌直接登录.该平台完全不了解SAML,并且在特别是不共享SimpleSAMLPHP会话状态.

注销需要发生两种方式,但是:

>如果用户点击我们平台上的注销按钮,需要将其登出我们的网站,并点击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的服务?

SLO问题

想象这个方案:

Plattform – 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 
}

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

您必须覆盖此函数,并且只有在存在的情况下才返回true,并且使用该函数激活有效的SP会话

$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更好不要混合.

原文地址:https://www.jb51.cc/php/131201.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐