我一直在研究这个问题,断断续续,几个星期,到目前为止还没有找到真正的、具体的解决方案——所以我想知道我是否可以激发一些关于其他人如何解决这个问题的想法,如果有的话。
设想
- 网站通过 AJAX 调用 WCF 服务(通过充当代理的 WebAPI,或直接,相同的最终结果)。
- 网站希望以 JSON 格式返回结果。
- 网站和 WCF 服务可能不在同一个盒子上,所以是跨域的。我知道可以在这里使用 WebAPI 来解决这个问题,但是,这并不总是可能的。
- WCF 服务只能从该单一网站(或具有身份验证详细信息的网站)调用,我不希望任何机器人向它发送垃圾邮件以获取数据。
很简单,对吧?错误的。
主要问题
- 基本身份验证 - 解决所有问题,对吗?不,如果您要跨域,则必须使用 JSONP 来获取 JSON 结果,其中您无法修改请求标头,因此无法通过标头中的身份验证详细信息发送。使用 http://test:test@url.com在某些主流浏览器 (IE) 中不起作用,CORS 也不起作用。
OAuth,可能是一个解决方案吗?我遇到的问题是,如果用户没有登录网站,那么如何进行双向握手,任何其他网站都不能简单地获取在查询字符串中发送的 API 密钥到服务?而且,如果 API 密钥有密码,它仍然只是以明文形式发送吗?我是否误解了这个过程,它对我的场景是否可行?
我看到这个看起来很有希望:http: //www.codeproject.com/Tips/372422/Secure-WCF-RESTful-service-using-OAUTH
但是,它的最后部分显示该服务仍被称为服务器端,而不是通过 jQuery。
拜托,拜托,对于我和可能在同一条船上的成千上万的其他人,那里有解决方案吗?
更新
最后,我确实最终使用了:http: //www.codeproject.com/Tips/372422/Secure-WCF-RESTful-service-using-OAUTH并沿着 OAuth 路由在请求之间进行身份验证。代码隐藏工作只是将参数和签名值注入页面上的 JavaScript 变量,然后通过 AJAX 请求将这些发送到服务。现在效果很好!