gpt4 book ai didi

c# - 基于 REST 的 WCF 身份验证

转载 作者:太空宇宙 更新时间:2023-11-03 16:22:38 24 4
gpt4 key购买 nike

我断断续续地研究了这个问题好几个星期了,但到目前为止还没有找到真正具体的解决方案 - 所以我想知道我是否可以就其他人如何解决这个问题提出一些想法,如果有的话。

场景

  • 网站通过 AJAX 调用 WCF 服务(通过 WebAPI 作为代理,或者直接,相同的最终结果)。
  • 网站希望返回 JSON 格式的结果。
  • 网站和 WCF 服务可能不在同一个盒子上,因此跨域。我知道可以在这里使用 WebAPI 来解决这个问题,但是,它不是总是有可能。
  • WCF 服务应该从那个单独的网站(或带有身份验证详细信息的网站),我不想要任何机器人向其发送垃圾邮件以获取数据。

很简单吧?错了。

主要问题

  • 基本身份验证 - 解决所有问题,对吗?不,如果你是跨域你必须使用 JSONP 来获取 JSON 结果,在您无法修改请求 header ,因此无法修改通过 header 中的身份验证详细信息发送。使用 http://test:test@url.com在某些主要浏览器 (IE) 中不起作用,并且CORS 也没有。

OAuth,可能是一个解决方案?我遇到的问题是,如果用户没有登录网站,那么如何进行双向握手,任何其他网站都不能简单地获取查询字符串中发送的 API key 服务?而且,如果有带有 API key 的密码,它仍然只是以明文形式发送吗?我是否误解了这个过程,它对我的​​场景是否可行?

我看到这个看起来很有希望: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 路由在请求之间进行身份验证。代码隐藏工作只是将参数和签名值注入(inject)页面上的 JavaScript 变量,并通过 AJAX 请求将它们发送到服务。现在效果很好!

最佳答案

那么您在站点 A 上有一项服务,您希望从站点 B 上的网站访问该服务? B对A的请求需要鉴权吗?

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

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

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

关于c# - 基于 REST 的 WCF 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13413561/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com