2010-09-30 18 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