Php 在两个站点之间安全地传递用户

Php 在两个站点之间安全地传递用户,php,security,login,multiple-domains,Php,Security,Login,Multiple Domains,我有我的网站“A”。我将与站点“B”签订业务合同,以使站点“B”的用户(将有许多这样的站点)能够在用户对“B”执行多个“a”相关操作时将其用户重定向到我的站点。我可以要求直接或通过“B”用户的浏览器将任何信息从“B”传递到“A”,但我(即站点A)需要验证它们是否确实来自“B”,并自动将它们登录到站点“A” 我知道OAuth在这方面做得很好,但只在“用户”级别。这里发生的事情是站点a和站点B之间的一份商业合同——没有必要让“B”的每个用户都不方便地完成整个OAuth跳环 还请注意,站点“B”用户将

我有我的网站“A”。我将与站点“B”签订业务合同,以使站点“B”的用户(将有许多这样的站点)能够在用户对“B”执行多个“a”相关操作时将其用户重定向到我的站点。我可以要求直接或通过“B”用户的浏览器将任何信息从“B”传递到“A”,但我(即站点A)需要验证它们是否确实来自“B”,并自动将它们登录到站点“A”

我知道OAuth在这方面做得很好,但只在“用户”级别。这里发生的事情是站点a和站点B之间的一份商业合同——没有必要让“B”的每个用户都不方便地完成整个OAuth跳环

还请注意,站点“B”用户将收到一个表单,他们需要单击该表单才能将这些操作传输到我的站点“a”。向“B”用户传送的任何机密/身份验证数据(如果有)都可以被他们看到(和篡改)。我的站点“A”必须对此进行保护

这很接近:

此处列出的选项:

  • 在两端通过HTTPS编写web服务调用,以检索用户详细信息,这仅适用于特定的登录对
  • 看看“直通认证”,它是一个允许用户身份从一个系统传递到另一个系统的概念
  • 我现在能想到的最好的事情就是传递用户ID的散列,或者如果这让你担心的话,传递一些其他用户数据的散列
  • 站点B可以有一个web服务,允许站点a为用户创建会话
  • 但我想知道,自从一年半前问起Q以来,ppl是否有不同的意见

    我的问题是:

  • 我应该如何实现这一点
  • 是否有现成的php实现支持此功能

  • [我已经实现了类似的东西,结果证明这是一个有缺陷的机制,所以我很好奇正确的机制是什么。]

    您可以使用类似的单点登录系统

    Shibboleth系统是一个基于标准的开源软件包,用于跨组织边界或在组织边界内进行web单点登录。它允许网站以保护隐私的方式为个人访问受保护的在线资源做出知情的授权决定


    如果这对您来说太过分了,只需通过HTTPS API授予两个站点访问彼此站点的用户数据的权限,该权限通过每个用户唯一的随机散列(单击“按钮”时只需传递该散列即可)。这些站点的安全级别是什么(即银行与博客)?对于非常简单的情况,站点B可以缓存表单数据校验和。当用户被重定向到A时,A可以直接向B查询校验和并验证数据。可以在站点之间设置IP或基于密钥的身份验证,以增加安全性

    如果您需要更多的安全性,也许OAuth仍然是最好的选择。请记住,用户已经登录到B,因此他们不需要输入任何内容。他们提交的表单实际上可以同时设置OAuth,这样当用户被重定向到A时,A实际上获得令牌,然后可以通过OAuth从B检索数据(从而验证数据来自B)

    除了前面提到的,还有一个您可能感兴趣的兼容标准,以及这两个协议的一个非常好的PHP实现,它作为现成的web服务以及用于自定义应用程序的库提供。建立这样一个SSO联盟的学习曲线并不陡峭,SimpleSAMLphp的文档编写得非常好

    但是,由于这样的SSO需要所有B-s使用SAML/Shibboleth,并且需要在各方之间设置和维护联合元数据,所以OAuth可能仍然是更好的选择