【问题标题】:Pass user data between web applications on different servers在不同服务器上的 Web 应用程序之间传递用户数据
【发布时间】:2010-01-07 18:13:54
【问题描述】:

我们有两个不同的 Web 应用程序,它们具有不同的服务器、堆栈等。我们将一个称为 host.example.com 的主机,另一个称为 client.example.com 的客户端.

我们希望我们的用户登录到 Host,并将他们的凭据和其他一些信息(真实姓名、电子邮件地址、出生日期等)传递给客户。这样做的最佳方法是什么?用户在 Host 上查看页面时通过 Javascript 请求访问 Client。

标准:

  • 最重要的标准是对 Host 的更改应尽可能简单易行。
  • 我们无法重定向用户(尽管他们的 JS 请求是公平的游戏)
  • 主机必须与平台无关。客户端是 App Engine 上的 Django,但我认为这并不重要。

我们想到的两个选项:

  • 客户端上的 API 用于主机传递数据。大致来说,在登录时,Host 会在 Client 上获取 login/,并将会话 ID 与数据一起传递。

  • 存储数据是经过签名或加密的 cookie。从最近关于 Django 中签名 cookie 的讨论来看,这看起来很难做到。

【问题讨论】:

    标签: web-applications session cookies


    【解决方案1】:

    您也可以混合使用这些解决方案。如果登录生成了一个散列/定时 SessionID 并将其与 IP/用户 ID 一起存储在一个小型会话数据库中,您可以将此数据存储在域级别的 cookie 中并直接传递。然后,客户端将第一次针对 db 验证 sessionid/timestamp/ip/etc 以验证即时身份验证,然后继续以愉快的方式处理用户和会话,但它希望处理它。如果您将时间戳期望保持在相当短的时间(10 秒?),它可以被使用和消耗,然后可以使用数据库 cron 作业来修剪错误或未消耗的条目。

    【讨论】:

    • 我没有看到比第一个选项有任何优势。
    • 这取决于架构和如何应用更新。一个是连接的架构,另一个是断开连接的。我不认为任何一个比另一个更好,这只是一个偏好问题。我有一种印象,他们以“我们真的不想这样做”的心态看待 API,所以我提出了一些不同的建议。
    【解决方案2】:

    这有点粗略,但您可以执行重定向到客户端上的页面,并将相关数据包含为 GET 变量。如果这样做,您可能应该对数据进行编码/加密。客户端会拾取数据,设置相关的 Session 信息,然后继续。

    【讨论】:

    • 是的,但我们真的不想重定向。我相应地更新了问题。
    • 那么浏览器在客户端是如何结束的??
    • 通过 javascript 请求。所以我们可以重定向请求,而不是用户的注意力。
    • 所以客户端的整个交互将通过您的主机服务器运行到客户端服务器......好像主机是一个代理?也许我只是不理解,但如果是这种情况,那么我不确定我能提供多少帮助。
    • 没有。我们在主机上查看一个页面。主机页面包含对客户端的 javascript 调用,其结果显示在页面上。
    【解决方案3】:

    也许通过共享会话状态? Here's an example 使用默认 SQL Server 会话提供程序并调整 GetTempAppId sproc 以提供相同的值,因此使存储和检索看起来好像来自单个应用程序。

    【讨论】:

      【解决方案4】:

      我认为最好的选择是第一个:

      客户端上的一个 API 用于主机传递 数据。大致上,在登录时,主机 在客户端上获取 login/ 并通过 会话 ID 以及数据。

      也许您可以使用OAUTH 来验证请求。有an open source implementation for App Engine from google 和另一个here

      【讨论】:

        【解决方案5】:

        您可以使用 Michael Bray 的想法,但用 Ajax 替换重定向吗?在服务器 1 上,向服务器 2 发送数据。服务器 2,为以后存储临时数据,服务器 1,向客户端和服务器 2 发送密钥,客户端使用 Ajax 从服务器 2 使用密钥获取数据。

        【讨论】:

          【解决方案6】:

          没有简单的方法可以做好这件事。有很多方法可以做到这一点,但没有一种方法既简单又安全。您可以考虑在主机上使用 cgi/fastcgi/web 服务技术。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-03-09
            • 2015-05-23
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多