2010-09-30 26 views
2

J'ai besoin d'appeler une API REST (HTTP) comme un appel POST - essentiellement, cela me permet de poster un message sur un forum/une communauté. Comme il n'y a actuellement aucun moyen de s'authentifier sur l'API, je dois dépendre des cookies du navigateur. c'est-à-dire que l'utilisateur se connecte à la communauté et utilise ensuite les appels d'API. Cela signifie que les proxys serveur sont exclus.Comment effectuer un appel POST interdomaine AJAX à partir d'un Sharepoint WebPart?

Et parce que c'est un appel POST, JSONP est également exclu, même si elle était supportée par le serveur de l'API.

Cet appel POST doit donc être javascript à 100%. Ce JS finira par faire partie d'un Webpart dans Sharepoint, donc je ne veux pas vraiment le compliquer avec iframes.

Bien?

Répondre

3

La seule façon de faire un POST inter-domaines est à l'écriture d'une forme:

<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> 

Vous ne pourrez pas lire la réponse dans le iframe en raison de la même politique d'origine, mais le POST sera faite.

Tout forum qui sait ce qu'il fait rejettera cette demande. Sinon, toute personne visitant un site tiers pourrait être amenée à poster automatiquement sur le forum contre son gré. Ceci est connu sous le nom de cross-site request forgery (XSRF) et est un problème de sécurité web pérenne. La plupart des administrateurs de forum considèrent que le code ci-dessus est hostile. Les forums sécurisés utilisent un jeton par action 'anti-XSRF' pour empêcher ce qui précède, exigeant essentiellement que les messages soient faits à partir du formulaire sur le site lui-même et non à partir d'un site tiers. Comme vous ne pouvez pas lire le document inter-domaine, vous ne pouvez pas pincer le jeton, donc vous ne pouvez pas autoriser un message.

+0

Je comprends les problèmes possibles que cela pourrait causer et je suis d'accord avec votre réponse. Il est important que je lise la réponse parce que c'est ce qui me dit si l'appel a été un succès ou non. –

+0

Btw, j'ai lu vos autres réponses par rapport à ce sujet. Est-ce que vous traînez beaucoup ce truc? :) –

+0

Oui, je passe plus de temps que je voudrais faire un non-sens AJAX. :-) Malheureusement, si vous avez besoin de la réponse * et * besoin de publier sous les informations d'identification de l'utilisateur, cela ne fonctionnera jamais, pour des raisons de sécurité assez bonnes. – bobince