使用SAML集中登录并使站点作为身份提供者工作

时间:2015-05-30 16:22:25

标签: php saml

所以我的情景如下:

我有两个网站 a.com 和网站 b.com 以及一个身份验证服务器 cauth.com

客户想要的是......

当用户登陆a.com或b.com时,用户会在相应网站上填写登录表单,但表单的操作将在cauth.com上(cauth.com/authenticate)。当用户在cauth上进行身份验证时,他会在两个站点上进行身份验证。

我正在考虑实现SAML以实现相同的流程就像 在身份验证之后,iDP(cauth.com)将向这两个服务提供商发送SAML响应,并且用户将被授予访问这两个站点的权限。

我是SAML的新手,无法获得相同的文档和理解。

我想知道的是:

  1. 我的问题解决方案值得实施吗?
  2. 是否可以将网站(cauth.com)作为身份提供者。我查看了帖子Making your PHP website into SAML Identity Provider,但无法获得正确的解决方案。

6 个答案:

答案 0 :(得分:2)

SimpleSamlPHP应该很容易设置。您需要制作文件夹modules/exampleauth/的副本,然后更改文件modules/<yournewmodule>/lib/Auth/Source/External.php以适用于您的网站。虽然文档很好,但它绝对是您需要的最简单的东西,也是最合适的。

我应该补充一点,按照设置SimpleSamlPHP的说明,应该让您基本了解哪些元数据文件最重要,它们存在的位置以及交互方式。

答案 1 :(得分:2)

我不确定您的应用程序使用的是哪种技术。如果您可以自由切换到JAVA,那么我可以建议您使用Spring-Saml,因为它非常容易实现并满足您的要求。 Spring-Saml拥有良好的文档和在线支持以及开源项目。 您可以将此link引用为Spring-saml,并为代码回购使用此link

您可以在您的abc.com和xyz.com应用程序中集成spring-saml,使其成为服务提供商(SP),您也可以将其部署在不同的域中。然后,您需要为SP配备一个IDP(身份提供程序服务器)。因此,您可以将ADFS与Active Directory或LDAP一起用作IDP。

我们对客户有类似的要求。我最近在我的项目中集成了spring-saml。

如有任何帮助,请告诉我

答案 2 :(得分:1)

像SAML或OpenID Connect这样的联合单点登录(SSO)机制将为您提供所需的功能。

这有一个重要区别,即登录表单不会在b.comcauth.com上显示,但这些网站宁愿重定向到cauth.com,用户也会在那里进行身份验证。然后,a.com会向用户已成功验证的b.comSeismicCube c = SeismicSystem.ExternalBulk3DService .CreateSeismicCube(seismicCollection, externalBulk3D) 发送可验证的“断言”。这构成了联邦SSO的主要目标之一,即不应由外国网站提供/存储用户凭证,并使认证手段独立于目标网站(“依赖方”)。

所以你应该寻找适合你的平台的SAML或OpenID Connect的实现(不要自己写!)并利用它。

答案 3 :(得分:0)

Shibboleth是开源的,也是最受欢迎的SSO解决方案之一。它包含SAML Identity Provider,您可以在此处下载:https://shibboleth.net/downloads/identity-provider/latest/

如果您的客户愿意,一种方法是使用像Okta这样具有developer program的云SSO提供商,并且可以使事情变得更容易。

答案 4 :(得分:0)

我认为你的描述中存在一个微妙的误解。对于SAML身份验证,如果站点 a.com 的用户单击登录链接/按钮或尝试访问安全页面,该用户将收到http 305重定向到 cauth.com < / em>的。在那里,用户将输入他们的凭据,用户将被重定向回 a.com。如果该用户然后转到站点 b.com 并尝试访问安全内容, b.com 使用相同的http 305重定向将用户发送到 cauth.com 。这次,由于 cauth.com 处的用户浏览器存在活动会话,因此用户不会看到凭证表单。相反,IDP会将用户的成功身份验证返回给 b.com 。用户看起来他们会自动登录到站点b,但事实上已经发生了SAML身份验证流程。

Hans Z的回答忽略了IDP仅根据a或b(依赖方或RP,也称为服务提供商或SP)的请求发送断言的事实。它不是所有RP的广播。

我强调SAML不支持 a.com 从用户接收凭据,然后将其传递给身份验证引擎。这是LDAP可能熟悉的模式。

查看the wikipedia entry on SAML.

中的序列图

答案 5 :(得分:-2)

按照以下说明获取PHP的SAML实现。

  

使用CI和php

对我来说非常适合