验证来自 Javascript 的跨域请求

Posted

技术标签:

【中文标题】验证来自 Javascript 的跨域请求【英文标题】:Authenticate a Cross-Domain Request from Javascript 【发布时间】:2013-03-12 12:03:24 【问题描述】:

我正在尝试构建一个实现基本身份验证的面向公众的 Web 服务 (WCF/Rest)。我遇到的问题是,为了使 web 服务可以访问,它必须允许来自其他域的脚本。为了做到这一点,最终用户将不得不使用 JSONP 来获取响应,并且 JSONP 请求不允许额外的标头(例如基本身份验证标头)。

我需要能够使用此解决方案支持 IE8-10、Firefox 和 Chrome。

我已尝试将网址更改为:

http://username:password@Service/Endpoint/Method

但在 IE10 中无济于事。

我也使用了这篇文章的建议:

http://kevinkuchta.com/_site/2012/01/basic-authentication-with-jsonp/

但它看起来也不能在 IE10 中削减它。

【问题讨论】:

您当前的解决方案是否适用于 IE10 以外的其他浏览器? 那么,你说你尝试过类似jsfiddle.net/shahverdy/D2AFR 的东西? 为什么不为需要认证的人实施 CORS?您可以使用 Ajax 发送凭据。 @Bergi 我认为 IE8 不支持 CORS,IE8 是我们产品中最常用的浏览器。 @AaronKurtzhals 图像解决方案可以在 Chrome 和 Firefox 中运行,但我不太高兴将其作为最终用户访问我们网络服务的“适当”方式。 【参考方案1】:

Here is an example of implementing HTTP auth with JSONP.

它假定您的服务器将跟踪用户是否使用 cookie 进行了身份验证。您将基本身份验证凭据放在图像请求中,在您通过身份验证后执行 JSONP。

或者,您可以使用身份验证详细信息传递查询字符串参数。这些将与 JSONP 一起使用。但是,这显然不是您要求的基本 HTTP 身份验证。

【讨论】:

以上是关于验证来自 Javascript 的跨域请求的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript中的跨域

Ajax中的跨域请求(跨源请求)

原生JS实现Ajax的跨域请求

AngularJS 中的跨域 HTTP 请求失败

使用 angularJS 的跨域请求

带 Cors 的跨域请求