一尘不染

Node.JS中的基本HTTP身份验证?

node.js

我想写书,所使用的一个一个的NodeJS
REST的API服务器Joyent的,并且一切正常,除了我无法验证普通用户的身份验证。如果我跳到终端并执行curl -u username:password localhost:8000 -X GET,则无法在NodeJS
http服务器上获取值username:password。如果我的NodeJS http服务器类似于

var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
}).listen(1337, "127.0.0.1");

,是否应该在来自回调的 req 对象中某处获取值username:password ?如何获得这些值而不必使用Connect的基本http
auth


阅读 264

收藏
2020-07-07

共1个答案

一尘不染

username:password 作为base64编码的字符串 包含在Authorization标头

试试这个:

http.createServer(function(req,res){
  var header=req.headers['authorization']||'',        // get the header
      token=header.split(/\s+/).pop()||'',            // and the encoded auth token
      auth=new Buffer.from(token, 'base64').toString(),    // convert from base64
      parts=auth.split(/:/),                          // split on colon
      username=parts[0],
      password=parts[1];

  res.writeHead(200,{'Content-Type':'text/plain'});
  res.end('username is "'+username+'" and password is "'+password+'"');

}).listen(1337,'127.0.0.1');

有关http授权的详细信息,请参见http://www.ietf.org/rfc/rfc2617.txt

2020-07-07