I realize this is a very old post, but I thought it might be helpful to add a simple, secure practice to address this issue in future implementations.
Embed a random API access token on your page, linked to the session. You can optionally refresh the token at each request if you wish to prevent inadvertent double-submits and so forth.
On the page
token = get random string, 8 to N characters long,
hashing if you desire greater security
store token in session
write some html
embed the code in a script tag:
var api_token = '<? echo code; ?>';
append api_token to all SOAP/JSONP requests
when the request returns, replace api_token with the new token
In the service
read api_token
look for api_token in session
if token does not exist, exit
else, continue ...
generate new token
store token in session
append token to response
This basic strategy is good for protecting service requests and validating link-clicks. I.e., you can verify with high certainty that delete.aspx?id=123 originated from manage.aspx or whatever, rather than from someone's FB feed, twitter, short URL service, etc..