我有两个网站 - 我说我有,但我的意思是其他人有一个不属于我的域而且我有一个,这更像是一个门户网站。在门户网站上,我们允许新用户注册。在网站上,他们允许我应该处理的新用户注册。他们不是将用户发送到我们的门户网站,而是希望将注册表单内置到他们的网站中。我不希望维护表单样式的责任,使其符合他们的网站主题/品牌,但我很高兴他们只是将HTTP POST传输到门户网站,供我处理和存储,并以200:OK或500:内部服务器错误响应,并标记任何错误,以便他们可以将错误转发给用户并让用户更正错误并重新提交。
我对他们的网站了解的事情(让我们称之为http://their.site.com/)是它所有的HTML5 / jQuery。幕后没有任何东西在进行。事实上,目前,他们的表单操作只是发布到电子邮件。我想发布一个AJAX请求,只是将表单数据发布给我处理。
我控制的门户是ASP.NET MVC4。它目前在视图中使用标准HtmlHelper.AntiForgeryToken,在控制器操作上使用[ValidateAntiForgeryToken]来帮助防止XSRF。
所以,那是我的出发点......
为了得到我需要去的地方,我想我理解过程的一部分,而不是其他人。我知道http://their.site.com/需要在其Web服务器上的网站配置中添加标头以允许这样做:
这告诉用户的Web浏览器,对于该页面(以及该Web服务器提供的任何页面),允许HTTP到my.portal.com的POST。是否允许他们通过Javascript / jQuery提交POST?我发现的信息似乎非常矛盾。一些消息来源说你仍然可以只做一个jQuery GET,其他人建议你可以做一个完整的POST,而其他人说你根本不能这样做,只能做一个完整的POST。因此,对此的一些明确性将非常有用。
另外,我不想盲目地接受来自所有域的POST,所以目前最好的做法是在门户端保护事物以允许来自此站点的跨域请求而不打开自己整个世界?
我的第一个想法是: - 要有一些机制允许其网站上的页面检索AntiForgeryToken表单字段和cookie,如果它由我的网站提供,该页面将具有该cookie。但我不确定如何提供,因为我没有提供表格。 - 我可以使用图像GET让my.portal.com提供cookie,但是他们如何用表单数据发布它,并且HTTP_REFERER足以验证令牌的请求是否真实?
更多信息:我只需要支持IE10,Firefox和Chrome,因此跨浏览器兼容性并不像其他情况那样大。
对博客文章或其他以安全方式启用此行为的材料的引用似乎让我望而却步。