在不同服务器上的Web应用程序之间传递用户数据

问题描述 投票:3回答:6

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

我们希望我们的用户登录到主机,并将其凭据和一些其他信息(真实姓名,电子邮件地址,DOB等)传递给客户端。最好的方法是什么?当查看主机上的页面时,用户从Javascript请求访问客户端。

标准:

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

我们已经想到的两个选择:

  • 客户端上用于主机的API,用于传递数据。大致来说,在登录时,主机在客户端上获取登录名/,并传递会话ID和数据。

  • 存储数据是经过签名或加密的cookie。从最近有关Django中签名cookie的讨论来看,这似乎很难解决。

web-applications session cookies
6个回答
1
投票

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


0
投票

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


0
投票

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


0
投票

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

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

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


0
投票

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


-1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.