在PHP Web应用程序中使用多个身份提供程序进行单一登录

时间:2015-12-03 00:36:56

标签: php oauth-2.0 ionic-framework single-sign-on saml

我在 PHP 中构建需要集成SSO的SAAS Web应用程序。我们将拥有多个客户组织,每个组织都有自己的身份提供商(Active Directory)。在研究可能性的同时,我遇到了SimpleSAMLphp,但我不确定它是否符合我的要求,并希望获得有关最佳实施方法的反馈。看起来像SAML或OAuth2是要走的路,但我在这方面的经验有限。

需要这些能力:

  1. 客户管理员应该可以通过AD添加和删除对我们应用的访问权限。
  2. 使用各自的AD服务器对用户进行身份验证(可以灵活地与他人进行身份验证) - 除了依赖静态IP,我如何知道要检查哪个身份提供商?
  3. 没有身份提供者的组织的用户应该能够通过现有的身份验证方法登录(在mysql中进行哈希传递)。
  4. 我们还有一个在IONIC框架上开发的混合移动应用程序(ios / android),它需要有SSO,想知道我是否通过REST API进行身份验证或者该过程如何工作。希望有一个可以同时适应Web应用程序和移动应用程序的解决方案 - 如果可能的话。
  5. 其他信息:我计划在CentOS服务器上托管PHP应用程序。如果需要,我们可以连接站点到站点VPN。

1 个答案:

答案 0 :(得分:1)

  1. 据我所知,AD无法执行OAuth,只能通过ADFS进行SAML
  2. 您可以为每个客户提供单独的SSO网址。或者您可以拥有单个SSO页面并确定要使用的IDP - 然后您可以先询问用户名,并检查该用户所属的客户端,然后拿起所有IDP并将其呈现给用户以选择一个,然后执行做SSO,最后在cookie中重新登记IDP偏好,所以下次你不必做所有这些。
  3. 当然,正常的un / pw登录页面
  4. 从来没有在移动设备上使用过SAML,但它主要是一个前端承载通道,猜测您必须打开一个Web视图并在其中执行SAML SSO过程。最后,您要么让您的网站完成整个SSO,并以某种方式"给予"应用程序的凭据,或者您从应用程序中获取响应并在应用程序中进行解码,但在这种情况下,由于与您的站点不同的断言使用者服务URL,它将与其自身的EntityID分开SP,这会给您的系统以及设置ADFS的客户带来额外的复杂性。猜猜你的网站的第一个选择是做更好的SSO。
  5. 我建议你看一下LightSAML - 一堆实现SAML数据模型和Web浏览器SSO配置文件的PHP库。如果你正在使用Symfony,它还提供了一个安全捆绑包,它最重要的是它适合自定义使用的库,而不是像简单的SAML那样的应用程序。

    对于应用程序设计,屏幕,流程和设置,您还可以检查zendesk是如何做到的。它们是具有多个SSO选项的多租户SAAS应用程序,例如SAML,JWT,甚至OAuth。有机会与他们融为一体,这非常适合你正在做的事情。

    如果你不限于SAML,我会建议JWT是最简单的,但不是很标准。