我想在客户端使用JQuery和服务器端的Node.js建立基本的HTTP身份验证。 我在服务器端发出了以下Ajax请求来设置标头:
$.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 / server HTTP / 1.1
主持人:server.com
连接:保持活力
访问控制请求方法:GET
来源:null
用户代理:Mozilla / 5.0(Macintosh; Intel Mac OS X 10_11_1)AppleWebKit / 537.36(KHTML,与Gecko一样)Chrome / 47.0.2526.111 Safari浏览器/ 537.36
访问控制请求标题:接受,授权
接受: /
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en; q = 0.8,fr; q = 0.6
请求标头字段不允许授权 预检响应中的Access-Control-Allow-Headers。
此外,请注意,从客户端到服务器的呼叫是跨域调用,这就是为什么在Node.js文件上写入这些设置标头的原因。
如何有效地执行此基本HTTP身份验证?
答案 0 :(得分:1)
由于您的客户端和服务器在不同的域上运行,因此您需要在服务器中配置CORS标头以使其正常工作。
您需要在服务器中设置标题"Access-Control-Allow-Origin:http://foo.example"
或"Access-Control-Allow-Origin:*"
。
答案 1 :(得分:1)
是的,这是一个角色问题。 当您在npm中启用cors(查找cors模块并通过npm附加它)时,您可以设置允许的特定域。设置此项时,将根据请求发送基本身份验证标头。 看看这个请求: https://stackoverflow.com/a/18511690/3232739