【问题标题】:Securely passing users between two sites在两个站点之间安全地传递用户
【发布时间】:2011-08-19 02:19:30
【问题描述】:

我有我的网站“A”。我将与站点“B”签订业务合同,以使站点“B”的用户(将有很多这样的站点)在用户对“B”执行许多“A”相关操作之一时将其用户重定向到我的站点.我可以要求将任何信息从“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 可以具有允许站点 A 为用户创建会话的 Web 服务。

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

我的问题:

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

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

【问题讨论】:

    标签: php security login multiple-domains


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2012-03-16
        • 2010-12-24
        • 1970-01-01
        • 2015-10-06
        • 1970-01-01
        • 2016-08-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多