jQuery 基本身份验证不起作用
Posted
技术标签:
【中文标题】jQuery 基本身份验证不起作用【英文标题】:jQuery basic authentication doesn't working 【发布时间】:2014-09-06 19:11:13 【问题描述】:我需要向使用基本身份验证的服务器发出 CORS 请求。我使用 jQuery 1.5.1 并拥有以下代码:
$.ajax(
type: 'GET',
global: true,
url: theSource,
crossDomain: true,
beforeSend: function(xhr)
xhr.withCredentials = true;
xhr.setRequestHeader("Authorization", "Basic " + btoa("username:password"));
,
error: function (xhr, status, errorThrown)
alert(errorThrown + '\n' + status + '\n' + xhr.statusText);
,
success: function (data)
ABC.ABCconsole.log('Success');
ABC.openAjaxSuccess(data);
);
在服务器端设置了这些标头:
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: Authorization, Accept
Access-Control-Allow-Methods: GET, POST, PUT, DELETE
Access-Control-Allow-Origin: http://example.com
不幸的是,服务器回复我有401 Unauthorized
错误。
在请求中,我有这些标题:
Accept:*/*
Accept-Encoding:gzip,deflate,sdch
Accept-Language:de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4
Connection:keep-alive
Host:example01.com
Origin:http://example.com
Referer:http://example.com/france/asd/qwes/business-nothing.html
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36
响应这些标题:
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: Authorization, Accept
Access-Control-Allow-Methods: GET, POST, PUT, DELETE
Access-Control-Allow-Origin: http://example.com
Content-Length:58
Content-Type:text/html
Date:Wed, 16 Jul 2014 09:42:00 GMT
Server:Microsoft-IIS/7.5
Set-Cookie:loc=phl;path=/;
WWW-Authenticate:Basic realm="example01.com"
你知道为什么会这样吗?
UPD: 正如您在请求中看到的,我没有看到我的 Authentication
标头已设置。如果我使用--disable-web-security
键运行浏览器,一切正常。并且Authentication
标头设置正确。
UPD2: 请求在 http POST 方法上失败。那么问题可能就在这里?
Remote Address:111.111.11.12:80
Request URL:http://example01.com/asst/index.epx?id=569fe9d0-1515-423a-bae8-84265b6396a0&_=1405506291028
Request Method:OPTIONS
Status Code:401 Unauthorized
【问题讨论】:
我认为服务器正在响应它所知道的。授权失败。用户名和密码是否正确?运行 wireshark 并在网络级别查看请求,并将其与在 Web 浏览器中访问同一页面进行比较,因此检查基本身份验证是否正常工作,并对其进行修改。或者使用 fiddler 进行修补。也许看看这里 ***.com/questions/5507234/…> @ActionDan 不幸的是,凭据是正确的。如果我从浏览器请求 url,我会得到登录表单。 Bot 它不适用于 jQuery CORS 请求。在回复中,我只收到 401 错误。 【参考方案1】:请改用Access-Control-Allow-Origin: *
。
【讨论】:
我无法访问远程服务器。此标头仅设置为安全策略的一个值。 然后配置你的本地开发机器使用相同的example.com,而不是'localhost'之类的。 我也从远程服务器发出请求。我所能做的就是在 Chrome 中编辑 js。 安装 Cross-Origin XMLHttpRequest chrome 扩展。启用它,看看它是否有效以上是关于jQuery 基本身份验证不起作用的主要内容,如果未能解决你的问题,请参考以下文章
基本身份验证在Spring-Boot WS Soap服务中不起作用