基本 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();
});

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

  1. 我没有看到在预检 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

  1. 我收到以下错误,我不太理解:

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