假设我的网络应用代表向我的应用提供其凭据的用户,因此应用可以向第三方服务进行API调用。顺便提一下,这是用于向第三方网站发布产品优惠(有点像eBay,但规模较小)。
现在,让这个帖子变得简单的一种非常方便的方法是重复使用第三方服务必须接受经过身份验证的用户的产品优惠的复杂Web表单。我们的想法是填充他们的Web表单并将客户端浏览器重定向到它,以便用户可以使用复杂和熟悉的Web表单编辑其中的内容。这将是最好的用户体验和最少的实施工作。
但是,这不是一种记录的方式。更重要的是,它不能以简单的方式工作,比如从请求参数(GET或POST)填充表单字段。网络表单不起作用。
可能有另一种选择。我的应用程序可以代表用户打开与第三方应用程序的会话,提交所有数据以便将其存储在数据库中,然后向用户的浏览器发送所需的所有数据以接管我的服务器应用程序在其上打开的会话代表。请注意,我还没有尝试过这个;我认为如果第三方应用程序将会话绑定到一个IP号码(无论是否有声,应用程序可能会这样做),它可能会失败。
但是不可能让打开HTTP会话的服务器程序将接管该会话所需的所有信息写入HTML / Javascript文档并将该文档发送到用户的浏览器,其中Javascript执行并组装直接在第三方表单上使用浏览器时编写的请求,我一直在使用HttpFox进行观察?
所有信息,即HTTP的一切;显然不可能将服务器的IP号传递给客户端...但是所有的cookie和参数。然后,在浏览器中执行的Javascript必须使用我将以某种方式传递到文档中的信息(可能在脚本部分中)来编写对第三方网站的请求,该请求直接进入服务器应用程序已打开的会话中。这意味着源自我的域的文档将设置cookie(添加请求标题),然后让用户的浏览器执行该请求。
换句话说,技术上是否可以将会话从服务器传递到客户端?
你会如何在Javascript中完成?
还没放弃。有XmlHttpRequest
个对象。也许这可以被滥用于我的邪恶目的?
所以我尝试了XmlHttpRequest
。坏消息(对于我和这个特殊情况):看起来它使用XmlHttpRequest
无效,因为(使用当前的Firefox)我的精心伪造的请求会根据看起来成为{{{ 3}},因此只需删除Cookie
标头,并将虚拟标头Moin
和Gurke
缩减为Access-Control-Request-Headers: gurke,moin
。坦白说,这正在破坏游戏大时间。我很失望。
答案 0 :(得分:0)
好的,放弃。我想做的是不可能的。这样做的原因是所谓的同源策略使浏览器变得更安全。有关指示,请参阅this other answer。我对跨源资源共享的W3C工作草案的评估似乎是错误的,该草案允许来自同源策略的例外。因此,如果广泛实施,它可能是可行的。但总的来说,这种尝试有太多的不确定性和不确定性。
毕竟不需要cookie和其中包含的会话ID。我已经弄清楚如何获取该请求所需的所有参数,并通过向他发送自动提交表单将其提供给客户:
<body onload="document.forms[0].submit()">
<form action="..." method="post">
...
然后客户进入他自己的会话。效果很好。只要他们不改变界面。我设置了测试来监控他们的表格,并提醒我采取行动他们以不相容的方式改变东西。