基本HTTP授权标头

时间:2016-01-19 08:27:49

标签: javascript jquery node.js http-headers http-authentication

我想在客户端使用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();
});

但是,这样做,我遇到了一些问题:

  1. 我没有看到标题是在预检OPTIONS HTTP请求中设置的:
  2.   

    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

    1. 我收到以下错误,我不太清楚:
    2.   

      请求标头字段不允许授权   预检响应中的Access-Control-Allow-Headers。

      此外,请注意,从客户端到服务器的呼叫是跨域调用,这就是为什么在Node.js文件上写入这些设置标头的原因。

      如何有效地执行此基本HTTP身份验证?

2 个答案:

答案 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