基本 HTTP 授权 header
Basic HTTP authorization header
我想 set-up 一个基本的 HTTP-Authentication,在 client-side 上使用 JQuery,在服务器端使用 Node.js。
我已在服务器端发出以下 Ajax 请求以设置 headers:
$.ajax({
type: "GET",
url: URL_SLACK_SERVER,
dataType: "json",
beforeSend: function(xhr){
xhr.setRequestHeader("Authorization", "Basic " +btoa("username:xxx") );
},
success:function(rsp){
filterMessages(rsp);
}
});
我想在我的服务器端使用 basic-auth 模块:
var express = require('express');
var bodyParser = require('body-parser');
var auth = require('basic-auth');
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Authorization, Accept, Key");
var cre = +auth(req);
console.log('Auth: ' +cre.username);
next();
});
但是,这样做,我遇到了一些问题:
- 我没有看到在预检 OPTIONS HTTP 请求中设置了 header:
OPTIONS /server HTTP/1.1
Host: server.com
Connection: keep-alive
Access-Control-Request-Method: GET
Origin: null
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111
Safari/537.36
Access-Control-Request-Headers: accept, authorization
Accept: /
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-US,en;q=0.8,fr;q=0.6
- 我收到以下错误,我不太理解:
Request header field Authorization is not allowed by
Access-Control-Allow-Headers in preflight response.
另请注意,客户端对服务器的调用是cross-domain调用,这就是为什么在Node.js文件中写入这些设置header的原因。
我怎样才能有效地执行这个基本的 HTTP-Authentication?
由于您的客户端和服务器 运行 在不同的域中,您需要在服务器中配置 CORS header 以使其正常工作。
您需要在您的服务器中设置 header "Access-Control-Allow-Origin:http://foo.example"
或 "Access-Control-Allow-Origin:*"
。
是的,这是一个 cors 问题。
当您在 npm 中启用 cors(查找 cors 模块并通过 npm 附加它)时,您可以设置允许的特定域。当您设置此项时,基本身份验证 header 将与请求一起发送。
看看这个请求:
https://whosebug.com/a/18511690/3232739
我想 set-up 一个基本的 HTTP-Authentication,在 client-side 上使用 JQuery,在服务器端使用 Node.js。 我已在服务器端发出以下 Ajax 请求以设置 headers:
$.ajax({
type: "GET",
url: URL_SLACK_SERVER,
dataType: "json",
beforeSend: function(xhr){
xhr.setRequestHeader("Authorization", "Basic " +btoa("username:xxx") );
},
success:function(rsp){
filterMessages(rsp);
}
});
我想在我的服务器端使用 basic-auth 模块:
var express = require('express');
var bodyParser = require('body-parser');
var auth = require('basic-auth');
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Authorization, Accept, Key");
var cre = +auth(req);
console.log('Auth: ' +cre.username);
next();
});
但是,这样做,我遇到了一些问题:
- 我没有看到在预检 OPTIONS HTTP 请求中设置了 header:
OPTIONS /server HTTP/1.1
Host: server.com
Connection: keep-alive
Access-Control-Request-Method: GET
Origin: null
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36
Access-Control-Request-Headers: accept, authorization
Accept: /
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-US,en;q=0.8,fr;q=0.6
- 我收到以下错误,我不太理解:
Request header field Authorization is not allowed by Access-Control-Allow-Headers in preflight response.
另请注意,客户端对服务器的调用是cross-domain调用,这就是为什么在Node.js文件中写入这些设置header的原因。
我怎样才能有效地执行这个基本的 HTTP-Authentication?
由于您的客户端和服务器 运行 在不同的域中,您需要在服务器中配置 CORS header 以使其正常工作。
您需要在您的服务器中设置 header "Access-Control-Allow-Origin:http://foo.example"
或 "Access-Control-Allow-Origin:*"
。
是的,这是一个 cors 问题。 当您在 npm 中启用 cors(查找 cors 模块并通过 npm 附加它)时,您可以设置允许的特定域。当您设置此项时,基本身份验证 header 将与请求一起发送。 看看这个请求: https://whosebug.com/a/18511690/3232739