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

时间:2010-01-07 18:13:54

标签: web-applications session cookies

我们有两个不同的Web应用程序,包含不同的服务器,堆栈等。让我们在 host.example.com 中调用一个主机,在 client.example.com调用另一个客户端。

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

标准

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

我们想到的两个选项:

  • Client for Host上传递数据的API。粗略地,在登录时,主机在客户端上获取登录名,并传递会话ID以及数据。

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

6 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

  

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

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

答案 4 :(得分:0)

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

答案 5 :(得分:-1)

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