从PHP web应用程序单一login多个身份提供商

我正在PHP中构build一个需要集成SSO的SAAS Web应用程序。 我们将拥有多个客户机构,每个机构都有自己的标识提供程序(Active Directory)。 在研究可能性的同时,我遇到了SimpleSAMLphp,但是我不确定它是否能够满足我的要求,并希望得到关于实现的最佳方法的反馈。 似乎像SAML或Kerberos是要走的路,但我在这方面的经验有限。

需要这些能力:

  1. 客户端pipe理员应该能够通过AD添加和删除我们的应用程序的访问。
  2. 使用各自的AD服务器对用户进行身份validation(与其他人进行身份validation的灵活性) – 除了依赖于静态IP,我怎么知道要检查哪个身份提供者?
  3. 没有身份提供者的组织的用户应该能够通过现有的身份validation方法(mysql中的散列传递)进行login

其他信息:我打算在CentOS服务器上托pipePHP应用程序。 我们有能力连接站点到站点VPN,如果需要的话…在stackoverflow上添加这个问题,没有响应那里,希望有些服务器pipe理员在这里可能有一些洞察力。

更新:此外,我们将有一个IONIC混合应用程序(IOS /安卓),将需要有SSO – 在这一点上,我不知道如何将配合。移动应用程序将通过REST API进行通信,开发PHP。

您需要做的是将ADFS与SimpleSAML集成。 您需要在ActiveDirectory中激活ADFS。

  1. 您将需要发送组成员作为声明规则,或类似的东西。

  2. 您绝对可以使用任意数量的SAML(ADFS)提供程序。 你只需要存储每个人的信息,并与每个人build立信任关系。

  3. 即使您实施SAML(基于ADFS),您仍然需要将用户信息存储在您的数据库中,否则您将无法根据这些信息在应用程序中进行关系。 所以,你可以添加另一个标志字段到users表中,以指定它是本地用户还是远程用户。 如果你想保持一致性,你也可以安装你自己的本地SAML服务器,并像使用单独的SAML提供程序一样使用它。

为了更容易的实现,您可能还需要看看WSO2 Identity Server,您可以使用它来联合login到多个SAML(以及其他types)的端点。 一个很大的优点是你也可以用它来存储你的本地用户。 使用这个,你可以在你的应用程序中实现一个端点,而WSO2处理所有其他的端点。 当然,你仍然需要build立WSO2和每个AD之间的信任。