当前位置: 首页 > 知识库问答 >
问题:

在PHP web app中使用多个身份提供者进行单点登录

林礼骞
2023-03-14

我正在用PHP构建一个需要集成SSO的SAAS web应用程序。我们将有多个客户组织,每个组织都有自己的身份提供者(Active Directory)。在研究可能性时,我遇到了SimpleSAMLphp,但我不确定它是否能满足我的要求,并希望得到关于最佳实现方法的反馈。看起来SAML或OAuth2是一个不错的选择,但我在这方面的经验有限。

需要这些能力:

  1. 客户端管理员应该能够通过广告添加和删除对我们应用程序的访问。
  2. 通过各自的广告服务器对用户进行身份验证(与他人进行身份验证的灵活性是一大优势)——除了依赖静态IP之外,我如何知道要检查哪个身份提供商
  3. 没有身份提供者的组织的用户应该能够通过现有的身份验证方法(mysql中的哈希传递)登录
  4. 我们还将有一个基于IONIC框架开发的混合移动应用程序(ios/android),该应用程序将需要SSO,我想知道我是否会通过REST API进行身份验证,或者该过程将如何工作。如果可能的话,希望找到一个既能容纳web应用程序又能容纳移动应用程序的解决方案

其他信息:我计划在CentOS服务器上托管PHP应用程序。如果需要,我们有能力连接一个站点到一个站点的VPN。

共有1个答案

牟辰龙
2023-03-14
  1. 正如我所知,广告不能做OAuth,只有通过ADF的SAML
  2. 每个客户端都可以有单独的SSO url。或者你可以有一个单一的SSO页面,并确定要使用哪个IDP——然后你可以首先询问用户名,检查用户属于哪个客户端,然后选择他们所有的IDP,并将它们呈现给用户选择一个,然后做SSO,最后在cookie中记住IDP首选项,这样下次你就不必做所有这些
  3. 当然,正常的un/pw登录页面
  4. 在移动设备上从未使用过SAML,但它主要是一个前端承载通道,我猜您必须打开一个web视图,在其中执行SAML SSO过程。最后,你要么让你的站点完成整个SSO,并以某种方式“给出”应用程序的凭据,要么从webview获取响应,并在应用程序中本地解码,但在这种情况下,由于断言消费者服务URL与你的站点不同,这将是一个单独的SP,具有自己的EntityID,这将给您的系统以及设置ADF的客户带来额外的复杂性。猜猜第一个选择是让你的网站做所有的SSO更好

我建议您看看LightSAML——一组实现SAML数据模型和Web浏览器SSO配置文件的PHP库。如果你正在使用Symfony,它还提供了一个安全包,最重要的是它是一个适合定制使用的库,而不是像simple SAML这样的应用程序。

对于应用程序设计、屏幕、流程和设置,您还可以查看zendesk是如何做到的。它们是多租户SAAS应用程序,具有多个SSO选项,比如SAML、JWT,甚至我认为是OAuth。有机会与他们融合,这非常适合你的工作。

如果你不局限于SAML,我建议JWT作为最简单的一个,尽管不是一个标准。

 类似资料:
  • 我们有一个asp。net应用程序,它允许我们的内部用户根据其角色访问和执行许多操作。我们也有一些部分的应用程序是可供公众访问的。我们需要使用ADFS 3.0实现此项目的单点登录。我知道我可以设置中继方并将应用程序设置为在SSO中工作。但是: 我们如何实现它以允许普通公众无需登录即可访问某些页面 感谢您的帮助! 谢谢,sri

  • 问题内容: 我的Web应用程序有多个身份验证管理器(一个用于API,一个用于WEB访问)。该api应该仅具有基本的身份验证服务- 通过spring安全标记进行配置,如下所示: 我无法内联身份验证提供程序,因为我希望它可以被子bean配置覆盖。 我的问题是我无法在security:authentication-provider元素上定义别名/ id以在身份验证管理器中引用它。有一个简单的解决方法吗?

  • 我已经创建了身份提供程序,并且从浏览器中它工作正常。 参考:密钥斗篷身份提供程序后代理登录抛出错误 从浏览器,我可以使用外部IDP登录,如果外部IDP用户不在keycloak中,它会在keyclock中创建,这绝对没问题,并重定向到仪表板。 但我的问题是,我们如何用keycloak rest api实现这个流程? 是否有任何api用于使用外部IDP登录,并将获得外部IDP的令牌以及密钥斗篷的令牌?

  • 我为一家SaaS提供商工作,该提供商希望以我们的应用程序作为服务提供商,向企业客户提供SSO应用程序。 我理解需要发生的事情背后的概念,并且SAML是我们希望做的事情的适当解决方案。看看更大的SaaS提供商(slack、dropbox、new relic等)我可以看到,它们通常似乎与许多身份提供商集成,如OneLogin、Bitium、Okta、Ping Identity等。。。以及通用SAML支

  • 我的目标是使用凭据进行两步身份验证。第一步是检查具有主体的用户是否在特殊数据库表中具有角色。其次是执行标准ldap身份验证。 我需要的是同时执行这两项检查,但身份验证提供程序的常见方法是在任何身份验证提供程序首次成功后声明身份验证成功。因此,我决定创建一个自定义的 AuthenticationProvider 实现,它调用 LdapAuthenticationProvider,然后执行数据库检查逻

  • 我在调试身份验证问题时遇到了这个代码片段: 我在调试和摆弄用户凭证时注意到,如果第一个身份验证提供者(即< code > userdailsservice )无法对我的用户进行身份验证,那么就会远程调用我的LDAP服务器来尝试对我的用户进行身份验证。但是,如果第一个身份验证提供者成功地对我的用户进行了身份验证,则不会调用第二个身份验证提供者。 我的问题是,列出这些身份验证提供者的工作方式是否使得如