我尝试使用JQuery Ajax进行基本身份验证。我像这样向ajax请求添加授权标头。
$.ajax({
headers: {
"authorization": "basic 123456",
},
crossDomain: true,
type: "POST",
contentType: "application/json; charset=utf-8",
url: 'http://example.com/Auth.asmx/Authorization',
data: null,
dataType: "jsonp",
success: function (data, status) {
console.log("Success");
console.log(data);
},
error: function (xmlRequest) {
console.log("Error");
console.log(xmlRequest);
}
});
然后在ASP. Net Web服务中,我尝试获取此标头。
[WebMethod]
[ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)]
public void Authorization(string callback)
{
string headers = GetRequestHeaders();
}
public string GetRequestHeaders()
{
HttpContext ctx = HttpContext.Current;
if (ctx == null || ctx.Request == null || ctx.Request.Headers == null)
{
return string.Empty;
}
string headers = string.Empty;
foreach (string header in ctx.Request.Headers.AllKeys)
{
string[] values = ctx.Request.Headers.GetValues(header);
headers += string.Format("{0}: {1}", header, string.Join(",", values));
}
return headers;
}
当我打印到标题时,我看不到授权标题
缓存控制:无缓存连接:保持活动状态Pragma:无缓存接受:接受编码:gzip,deflate接受语言:tr tr,tr;q=0.9,en-US;q=0.8,en;q=0.7主机:示例。com参考:http://localhost:9200/test.html
用户代理:Mozilla/5.0(Windows NT 10.0;Win64;x64)AppleWebKit/537.36(KHTML,如Gecko)Chrome/78.0.3904.108 Safari/537.36
为什么我看不到授权标头,如何获取此值?
附言:我在客户端使用JQuery 2.2.3
我尝试了一些不同的东西。我在本地创建了Node JS服务器,而不是向它发送相同的请求。授权标头仍然无法显示。
我使用“Postman”应用程序创建并发送请求。我添加授权标头,然后发送到我的服务器(ASP.Net和Node JS)。我在此应用程序的请求中看到了授权标头。
对于ASP. Net,输出是
缓存控制:无缓存
连接:保持活动状态
接受:/
接受编码:gzip,放气
授权:基本12345
主机:192.168.1.100
用户代理:PostmanRuntime/7.17.1
邮递员代币:5911bb3a-ea8a-4f81-8579-7e6aed3ced61
然后,我从Postman应用程序中获取Jquery AJAX输出以创建此请求。
var settings = {
"async": true,
"crossDomain": true,
"url": "http://192.168.1.107:1800",
"method": "GET",
"headers": {
"Authorization": "Basic 12345",
"User-Agent": "PostmanRuntime/7.17.1",
"Accept": "*/*",
"Cache-Control": "no-cache",
"Postman-Token": "5911bb3a-ea8a-4f81-8579-7e6aed3ced61,3455808c-4a4f-4108-b819-f061b5a8e37e",
"Host": "192.168.1.100",
"Accept-Encoding": "gzip, deflate",
"Connection": "keep-alive",
"cache-control": "no-cache"
}
}
$.ajax(settings).done(function (response) {
console.log(response);
});
我这样更改了Ajax设置。
$.ajax({
"async": true,
"crossDomain": true,
"url": "http://192.168.1.107:1800",
"method": "GET",
"headers": {
"Authorization": "Basic 12345",
"User-Agent": "PostmanRuntime/7.17.1",
"Accept": "*/*",
"Cache-Control": "no-cache",
"Postman-Token": "5911bb3a-ea8a-4f81-8579-7e6aed3ced61,3455808c-4a4f-4108-b819-f061b5a8e37e",
"Host": "192.168.1.100",
"Accept-Encoding": "gzip, deflate",
"Connection": "keep-alive",
"cache-control": "no-cache"
},
success: function (data, status) {
console.log("Success");
console.log(data);
callback("Authorization OK");
},
error: function (xmlRequest) {
console.log("Error");
console.log(xmlRequest);
callback("Authorization Error");
}
});
当我向服务器发送相同的请求时,我无法再次看到授权标头。
我的请求标题
“host”:“192.168.1.107:1800”,
“连接”:“保持活力”,
“pragma”:“无缓存”,“缓存控制”:“无缓存”,
“访问控制请求方法”:“获取”,
“来源”:http://localhost:9200“,
“用户代理”:“Mozilla/5.0(Windows NT 10.0;Win64;x64)AppleWebKit/537.36(KHTML,如Gecko)Chrome/78.0.3904.108 Safari/537.36”,
“访问控制请求头”:“授权、缓存控制、邮递员令牌”,
“接受”:“/”,
“referer”:http://localhost:9200/main.html“,
“接受编码”:“gzip,放气”,
“接受语言”:“tr tr,tr;q=0.9,en-US;q=0.8,en;q=0.7”
试试这个兄弟:
JS代码(AJAX)
$.ajax({
crossDomain: true,
type: "POST",
beforeSend: function (xhr) {
xhr.setRequestHeader("Access-Control-Allow-Origin", "*");
xhr.setRequestHeader('Authorization', 'Hello 123456');
},
contentType: "application/json; charset=utf-8",
url: 'http://example.com/Auth.asmx/Authorization',
data: "{'callback':'test'}",
dataType: "jsonp",
success: function (data, status) {
console.log("Success");
console.log(data);
},
error: function (xmlRequest) {
console.log("Error");
console.log(xmlRequest);
}
});
您可以通过以下方式读取值:
C#代码
string auth = HttpContext.Current.Request.Headers["Authorization"];
注意:如果这不起作用,请尝试在您的IIS版本中配置交叉源请求,您可以从Web.config
或从IIS管理面板执行,具体取决于版本:https://enable-cors.org/server_iis7.html
我已经实现了一个使用基本身份验证(使用Spring Security性)的web服务器。 我在访问URL时禁用了默认身份验证入口点(它只返回401,而不是用www身份验证标头响应401),目的是防止浏览器显示身份验证弹出窗口。 我能够用javascript代码和命令行工具(如curl)连接到服务器,但是当我用浏览器(chrome)测试它时 <代码>curl-v-u用户:密码本地主机:8080/用户
我正在尝试将带有表单数据的POST请求从React前端发送到Go后端。 在后端,我尝试通过以下方式访问数据: 但是,我收到以下错误: 此外,fileHeader是。 我发现的唯一可能的解决方案是删除这篇文章中提到的标头,但在POST正文中编码授权令牌当然不是我解决此问题的首选方法。 由于已经有人问过这个问题,我不清楚这个问题:将标题设置为 导致同样的问题。 PS:React fetch似乎会自动生
如何通过Axios.js发送带有令牌的身份验证头?我试过几件事都没有成功,比如: 给出以下错误:
我正在做一个带有用户名和密码的登录屏幕。如果登录成功,服务器将返回令牌。然后,我试图调用另一个函数来获取用户信息,但没有传递授权标头。我正在邮递员上尝试我的服务器方法,它工作得很好,所以我相信问题出在邮件头上。有人能告诉我该怎么做吗? 请注意,result.access_token!=null是true.并且我成功地拿回了令牌。但是它不会被再次传递到第二个url(info)
我想向我的节点添加文档。js API,为此,我有一个YAML文件,我把我的定义放在那里,swagger文档位于localhost:5000/API doc,运行良好。 现在,我必须用以下定义添加Bear authorization but Swagger: 在测试请求时(我点击右上角的“授权”按钮并输入我的令牌),我得到以下错误: “错误”:“未找到授权标头”。 为什么请求中不包括标题?
我有以下Spring Security配置: 我想让每个人(包括经过身份验证的用户和未经身份验证的用户)都可以访问特定的页面(比如索引页面(“/”),但同时,能够根据用户是否经过身份验证以及其角色来管理应该在jsp中看到哪些部分。 我的jsp部分如下所示: 所有的认证机制都可以正常工作。问题是,即使我使用“管理员”角色登录,链接也永远不会显示。 我尝试调试我的userdetails服务实现,并验证