1

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

知道OAuth 做得很好——但仅限于“用户”级别。这里发生的事情是站点 A 和站点 B 之间的商业合同 - 没有必要给“B”的每个用户带来不便来进行整个 OAuth 跳跃......

另请注意,站点“B”用户将看到一个表单,他们需要单击该表单才能将这些操作传输到我的站点“A”。他们可以看到(和篡改)正在与“B”用户通信的任何秘密/身份验证数据(如果有)。我的站点“A”必须防止这种情况。

这很接近:在网站之间安全地转移用户

那里列出的选项:

  1. 在两端通过 HTTPS 编写 Web 服务调用以检索用户详细信息,并且仅适用于特定的登录对。
  2. 看一下“直通身份验证”,它是一个允许用户身份从一个系统传递到另一个系统的概念。
  3. 我现在能想到的最好的事情是传递用户 ID 的哈希值,或者如果这让你担心,那就是其他一些用户数据的哈希值。
  4. 站点 B 可以具有允许站点 A 为用户创建会话的 Web 服务。

但我想知道自从一年半前问 Q 以来,人们是否有不同的意见。

我的问题:

  1. 我应该如何实现这个?
  2. 任何现成的 php 实现可以实现这一点?

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

4

2 回答 2

0

您可以使用像Shibboleth这样的单点登录系统。

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

如果这对您来说太过分了,只需通过 HTTPS API 通过每个用户唯一的随机哈希授予两个站点访问彼此站点的用户数据的权限,该随机哈希在单击“按钮”时简单传递。

于 2011-05-05T06:18:44.197 回答
0

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

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

除了已经提到的Shibboleth之外,还有一个您可能感兴趣的兼容标准SAML 2.0以及这两种协议SimpleSAMLphp的非常好的 PHP 实现,它作为现成的 Web 服务以及用于自定义应用程序的库提供。建立这样一个 SSO 联合的学习曲线并不太陡峭,SimpleSAMLphp 的文档也很好。

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

于 2011-05-05T06:45:27.520 回答