如何从Sharepoint Webpart进行跨域AJAX POST调用?

时间:2010-09-30 10:00:07

标签: ajax sharepoint json web-parts cross-domain

我需要调用(HTTP)REST API和POST调用 - 基本上,它允许我将消息发布到论坛/社区。

由于目前无法对API进行身份验证,因此我需要依赖浏览器Cookie。即,让用户登录社区,然后使用API​​调用。这意味着,排除了服务器代理。

由于它是一个POST调用,JSONP也被排除在外,即使它的API服务器支持它。

所以这个POST调用需要100%javascript。

这个JS最终会成为Sharepoint中Webpart的一部分,所以我真的不想让它与iframe复杂化。

好?

1 个答案:

答案 0 :(得分:3)

执行跨域POST的唯一方法是编写表单脚本:

<iframe name="iframe"></iframe>
<form id="foo" target="iframe" method="POST" action="http://...">
    <input type="hidden" name="parameter 1" value="bar"/>
    ...
</form>
<script type="text/javascript">
    ...
    document.getElementById('foo').submit();
</script>

由于同源策略,您将无法读取iframe中的响应,但将进行POST。

任何知道自己在做什么的论坛都会拒绝此请求。否则,访问第三方网站的任何人都可以根据自己的意愿自动发布到论坛。这称为跨站点请求伪造(XSRF),并且是一个长期的Web安全问题。大多数论坛管理员会认为上述代码是敌对的。

安全论坛使用'反XSRF'每操作令牌来阻止上述操作,基本上要求从网站本身的表单发布,而不是从第三方网站发布。由于您无法阅读包含跨域的文档,因此无法捏住令牌,因此无法授权帖子。