【问题标题】:WCF Authentication over REST基于 REST 的 WCF 身份验证
【发布时间】: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


    【解决方案1】:

    所以您在站点 A 上有一项服务,您想从站点 B 上的网站访问该服务? B 到 A 的请求需要认证吗?

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

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

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

    【讨论】:

    • 我考虑过这样做(WebAPI 充当代理)。但是,在 URL 术语中,它仍然是site/api/ExampleCall,任何人都可以访问。该站点没有登录,那么您如何区分访问此 URL 以获取数据的“好”和“坏”用户?你总是必须有一个 jQuery 的 HTTP URL 才能调用,而这个调用应该被锁定,代理或没有代理。
    • 最后一段,就令牌而言,基本上是 OAuth 所做的吗?
    • @thedixon,您必须拥有执行请求的 Javascript 客户端才能将令牌附加到请求中。这可以在 URL (&token=123abc) 或 HTTP 标头字段 ((X-)Token: 123abc) 中完成。然后,您可以在代理中读取此令牌。我对 OAuth 了解不多,所以无法回答。
    • 我已将此标记为答案,感谢您的时间和精力。我已经更新了我的答案,让其他人看看我使用了什么解决方案。
    • 没有客户端通常是“未经身份验证的” - 每个客户端(网站/应用程序)都必须有一个身份验证密钥才能访问服务。
    猜你喜欢
    • 1970-01-01
    • 2011-11-03
    • 2011-02-04
    • 1970-01-01
    • 2015-04-14
    • 1970-01-01
    • 2018-02-24
    • 2011-03-27
    • 1970-01-01
    相关资源
    最近更新 更多