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 基本身份验证不起作用的主要内容,如果未能解决你的问题,请参考以下文章

基本的HTTP身份验证,扭曲不起作用

iOS - Alamofire v2 基本身份验证不起作用

基本身份验证在Spring-Boot WS Soap服务中不起作用

烧瓶上的 HTTP 摘要身份验证对我不起作用

基于 JSF 表单的身份验证 + 托管 Bean 登录不起作用

ASP.Net Core - 使用 WebAPI 和 MVC 前端的 JWT 身份验证不起作用