通过REST进行WCF身份验证

时间:2012-11-16 09:16:05

标签: c# .net wcf wcf-security

我现在一直在研究这个问题,现在已经有好几个星期没有发现真正的,具体的解决方案了 - 所以我想知道我是否可以就其他人如何解决这个问题提出一些想法,如果有的话。

方案

  • 网站通过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请求将这些值发送到服务。它现在很棒!

1 个答案:

答案 0 :(得分:0)

您希望从网站B上的网站访问网站A上的服务吗? B到A的请求需要进行身份验证吗?

然后,您可以在站点B上实现代理,该代理对站点A上的服务进行经过身份验证的调用。此身份验证可以采用任何形式,但基本身份验证+ HTTPS是可行的。或者看看客户证书。你必须配置一次,它不应该改变。现在没有人可以访问站点A上的服务,除非他们拥有基本身份验证凭据或客户端证书(或您提供的其他凭据)。

然后从站点B上的网站向站点B上的代理发出请求,使用(服务器端)配置的凭据将请求重定向到站点A上的服务。

如果您希望每个人都能够从站点B上的网站呼叫站点B上的代理,即使没有登录网站,也无法从其他任何地方登录,您可以让网站创建令牌(服务器端),在代理注册。然后,如果网站向代理发出请求,则会发送其令牌。令牌可以在有限的时间或请求(甚至一个请求)内有效。