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

时间:2011-05-05 06:05:20

标签: php security login multiple-domains

我的网站是'A'。我将与网站“B”签订商业合同,以便当用户在“B”上执行许多“A”相关操作之一时,将网站“B”的用户(将有许多此类网站)将其用户重定向到我的网站。我可以命令直接或通过'B'用户的浏览器将任何信息从'B'传递给'A',但我(即网站A)需要验证它们确实来自'B'并自动记录它们进入网站'A'。

知道 OAuth做得很好 - 但仅限于“用户”级别。这里发生的是网站A和网站B之间的商业合同 - 并且不需要为每个“B”用户带来麻烦来完成整个OAuth箍跳......

另请注意,网站“B”用户将看到他们需要点击的表单,以便将这些操作传输到我的网站“A”。无论哪个秘密/认证数据(如果有的话)被传送给'B'用户,他们都可以看到(并被篡改)。我的网站'A'必须防止这种情况。

这很接近:Securely Transferring Users Between Web Sites

那里列出的选项:

  1. 在两端通过HTTPS编写Web服务调用,以检索用户详细信息,并且仅适用于特定的登录对。
  2. 看看“传递身份验证”,它是一个允许用户身份从一个系统传递到另一个系统的概念。
  3. 我现在能想到的最好的事情就是传递用户ID的HASH,或者如果这让你担心,那就是其他一些用户数据的哈希。
  4. 站点B可以拥有一个Web服务,允许站点A为用户创建会话。
  5. 但是我想知道自从Q被问到一年半之后,人们是否会有不同的意见。

    我的问题:

    1. 我该如何实现?
    2. 任何现成的php实现都支持这个吗?
    3. [我已经实现了类似的东西,结果证明是一个有缺陷的机制,所以我很好奇正确的机制是什么。]

2 个答案:

答案 0 :(得分:0)

您可以使用Shibboleth等单点登录系统。

  

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

如果这对您来说太过分了,只需通过HTTPS API通过HTTPS API授予两个站点访问每个其他站点的用户数据的权限,这对每个用户来说都是唯一的,只需点击“按钮”即可。

答案 1 :(得分:0)

这些网站的安全级别是什么(即银行与博客)?对于非常简单的情况,站点B可以缓存FORM数据CHECKSUM。当用户被重定向到A时,A可以直接查询B以获取校验和并验证数据。可以设置站点之间的IP或基于密钥的身份验证,以增强安全性。

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

除了已经提到的Shibboleth之外,还有一个兼容的标准SAML 2.0可能会让您感兴趣,并且这两个协议SimpleSAMLphp的PHP实现非常好。服务以及用于自定义应用程序的库。设置这样一个SSO联盟的学习曲线不是太陡峭,而且SimpleSAMLphp也有很好的文档。

但是,由于这样的SSO需要所有B-s的SAML / Shibboleth以及在各方之间设置和维护联盟元数据,OAuth可能仍然是您的最佳选择。