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