2012-03-09 62 views
1

我想将一些数据从一个ASP.NET(WebForms)应用程序传输到另一个,编辑:第一个应用程序重定向到第二个应用程序。这两个应用程序在负载平衡环境中运行,因此不一定在同一台服务器上执行。我们正在讨论一个尺寸范围为几百到几千个字节的XML blob,因此编码并将其添加到URL查询字符串中有点长。用户还必须无法使用这些数据(目前它不是安全关键,但将其暴露给用户看起来仍然是一个坏主意)。在ASP.NET应用程序之间传输数据,而不是在URL中传输数据?

有关如何做到这一点的任何建议?

回答

0

感谢所有回复!在与办公室的其他人谈话时,最终我们决定,由于数据实际上是由另一个Web应用程序提供的,因此使用这些数据的两个应用程序都只是打电话给第三方获取数据。这种方法的不足之处在于拨打电话两次需要的时间很少;好处是它实际上确保两个应用程序始终具有最新的数据,即使是天真的实现也使得最终用户很难对数据做任何事情。

0

将它存储在一个加密的cookie中,您将只为每个请求/响应添加1Kb。

+0

OP说'用户也不能使用这些数据。将它粘贴到cookie中将允许使用Firebug等访问数据。 – mdm 2012-03-09 13:32:09

0

使用跨站点请求应该相当容易。

第一个应用程序应该只返回一个包含与Action参数指向其他应用程序的URL形式的页面。该页面还应该包含一个小的JavaScript来在页面加载后立即回发表单。页面主体包含要在服务器之间传递的数据。

这样您就可以使用客户端浏览器为您完成这项工作。因为页面的主体可能比uri/cookie长得多,所以这种方法应该适合你。

请注意,这是完全合法的,至少很少被动认证协议依赖于这种可能性。

编辑:数据的完整性是通过密码实现的。数据可以进行签名(最简单的方法)或加密+签名(这不仅可以防止用户执行数据操作,还可以查看内容)。

另外请注意,如果您还没有涉及到客户端浏览器,你可以使用任何通信协议直接传递服务器之间的数据(TCP,HTTP)。

+0

如果将恶意用户发送到浏览器,您将如何阻止恶意用户看到数据? – mdm 2012-03-09 13:34:34

+0

您可以对其进行加密,甚至可以在接收方对其进行签名验证。 – 2012-03-09 14:22:47

1

我不知道你的情况的所有细节,但有几种方法可以做到这一点。

  1. 您可以将XML blob从一个站点插入到数据库中,并从另一个站点的数据库中检索它。

  2. 你可以从一个应用到一个接收器页面中的其他应用程序然后将读取请求的XML发布您的XML二进制大对象。

  3. 您可以创建在第二应用与web服务接收来自拳头应用XML二进制大对象的方法。

  4. 您可以将XML写入一个应用程序中的文件,并从第二个应用程序中的文件读取它。

+0

#4肯定是因为负载平衡以及使用(竞争条件风险太高)。 – 2012-03-09 13:22:28

2

只是快速的想法从我的头顶......

如果数据完全是特定于当前用户的会话,以及两个站点在同一域中运行。

  1. 为客户端生成的关键 - 这将是相当独特的东西,比如像md5(some guid + some header from the user's browser)

  2. 存放在键值存储/数据库表中的信息,从生成的密钥1作为关键。

  3. 将密钥设置为客户端的cookie。

这样你可以避免以往的数据发送到客户端,和“钥匙”应该是足够的随机,这将是非常难以猜测。如果您还存储标题和用于生成散列哈希的GUID,则可以根据请求中发送的标头验证用户cookie中的密钥,并在所有细节不匹配时拒绝访问。这也有利于您可以存储尽可能多的数据,因为您可以在服务器端实际应对这些数据。

0

也许就像一个SSO或类似的东西。

在数据库中,这些列的表:
的Guid(Guid.NewGuid()
内容
日期
(也许其他列,如用户ID ...对于安全日志)

第一个Web应用程序通过URL发送Guid。 第二个检索数据库中的内容。

日期可用于验证数据:您只能在X秒内访问该内容。