在ASP.NET应用程序之间传输数据,而不是在URL中?
我想将一些数据从一个ASP.NET(WebForms)应用程序传输到另一个应用程序,编辑:,其中第一个应用程序重定向到第二个应用程序。这两个应用程序在负载平衡的环境中运行,因此不必在同一台服务器上执行。我们讨论的是一个XML blob,其大小范围为几百到也许1000字节,因此编码并将其固定到URL查询字符串中有点长。用户也必须不能篡改这些数据(目前它不是安全关键的,但将其暴露给用户似乎仍然是一个坏主意)在ASP.NET应用程序之间传输数据,而不是在URL中?,asp.net,Asp.net,我想将一些数据从一个ASP.NET(WebForms)应用程序传输到另一个应用程序,编辑:,其中第一个应用程序重定向到第二个应用程序。这两个应用程序在负载平衡的环境中运行,因此不必在同一台服务器上执行。我们讨论的是一个XML blob,其大小范围为几百到也许1000字节,因此编码并将其固定到URL查询字符串中有点长。用户也必须不能篡改这些数据(目前它不是安全关键的,但将其暴露给用户似乎仍然是一个坏主意) 有什么建议吗?将其存储在加密的cookie中,每个请求/响应只需增加1Kb。使用跨站点请求应
有什么建议吗?将其存储在加密的cookie中,每个请求/响应只需增加1Kb。使用跨站点请求应该相当容易 第一个应用程序应该只返回一个包含表单的页面,该表单的
Action
参数指向另一个应用程序的url。页面还应该包含一个小javascript,以便在加载页面后立即回发表单。页面主体包含要在服务器之间传递的数据
这样,您就可以使用客户端的浏览器为您完成工作。因为页面的主体可以比uri/cookie长很多,所以这种方法应该适合您
注意,这是完全合法的,并且至少很少有被动身份验证协议依赖于这种可能性
编辑:数据的完整性是通过加密实现的。数据可以签名(最简单的方法)或加密+签名(这不仅可以防止用户修改数据,还可以防止用户看到内容)
另外请注意,如果您不必使用客户端浏览器,您可以使用任何通信协议在服务器之间直接传递数据(TCP、HTTP)。我不知道您的情况的所有细节,但有几种方法可以做到这一点
只是我脑子里的一个想法 如果数据完全特定于当前用户的会话,并且两个站点运行在同一个域上
md5(来自用户浏览器的一些guid+一些头)
这样可以避免将数据发送到客户端,“密钥”应该是随机的,以至于很难猜测。如果还存储用于生成/添加哈希的头和GUID,则可以根据请求中发送的头验证用户cookie中的密钥,如果所有详细信息不匹配,则拒绝访问。这还有一个好处,就是您可以在服务器端存储尽可能多的数据。您可能需要研究or或。可能类似于SSO或类似的东西 在数据库中,包含以下列的表:
Guid(
Guid.NewGuid()
)内容
日期
(可能是其他列,如用于安全日志的用户id…) 第一个webapp通过URL发送Guid。 第二种方法检索数据库中的内容
日期可用于验证数据:您只能在X秒内访问内容。感谢所有响应者!在与办公室的其他一些人讨论这一点时,我们最终决定,由于数据实际上是由另一个web应用程序提供的,因此使用数据的两个应用程序都只需向第三个应用程序打电话获取数据。这种方法的缺点是打两次电话所需的时间很短;好处是,它实际上确保了两个应用程序始终拥有最新的数据,即使是一个简单的实现也会让最终用户很难对数据进行任何处理。#4肯定是过时的,因为负载平衡和使用(竞争条件的风险太高了).OP说“用户也不能篡改这些数据”。将其粘贴在cookie中将允许使用Firebug等访问数据。如果数据发送到浏览器,您如何阻止恶意用户查看数据?您可以对其进行加密,甚至在接收方对其进行签名验证。