2010-09-30 78 views
2

我需要调用(HTTP)REST API作为POST调用 - 基本上,它允许我发布消息给论坛/社区。如何从Sharepoint Webpart进行跨域AJAX POST调用?

因为目前没有通过API进行身份验证的方法,所以我需要依赖浏览器cookie。即让用户登录到社区,然后使用API​​调用。这意味着,服务器代理被排除。

而且由于它的POST调用,JSONP也被排除,即使它被API的服务器支持。

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

这个JS最终将成为Sharepoint中的一个Web部件的一部分,所以我并不想让它与iframe复杂化。

好吗?

回答

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”每动作令牌来防止上述情况发生,基本上要求从网站本身的表单发布帖子,而不是从第三方网站发布。由于您无法阅读包含跨网域的文档,因此您无法捏缩令牌,因此无法授权发布帖子。

+0

我了解这可能导致的可能的问题,我同意你的答案。 重要的是我阅读了回复,因为这是告诉我该电话是否成功。 – 2010-09-30 11:19:15

+0

顺便说一句,我读过你的其他答案有关这个话题。你有很多这种东西吗? :) – 2010-09-30 11:20:19

+0

是的,我花了比我想做AJAX废话更多的时间。 :-)不幸的是,如果你需要响应*和*需要在用户的凭据下发布,这是永远不会工作,出于相当好的安全原因。 – bobince 2010-09-30 22:06:21