【发布时间】:2012-11-16 09:16:04
【问题描述】:
我一直在研究这个问题,断断续续地研究了几个星期,但到目前为止还没有找到真正具体的解决方案 - 所以我想知道我是否可以激发一些关于其他人如何解决这个问题的想法,如果有的话。
场景
- 网站通过 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 请求将这些发送到服务。现在效果很好!
【问题讨论】:
标签: c# .net wcf wcf-security