2018.06.14 11:51

【Node.js】basicAuth中间件的使用

basicAuth

basicAuth中间件为网站添加身份认证功能,使用该中间件后,用户访问网站必须输入用户名和密码并通过验证后才能访问网站。

GitHub示例工程源码点击源码链接

安装basic-auth

npm install basic-auth --save

实现

接下来require basic-auth并创建中间件使之处理认证请求。

当用户输错用户名及密码时返回401 Unauthorized,应答中包含一个WWW-Authenticate头,浏览器据此显示用户名字/密码对话框,引导用户填写合适的Authorization头后再次发出请求。

var basicAuth = require('basic-auth');
  
  
var auth = function(req, resp, next) {
	function unauthorized(resp) {
		// 认证框要求输入用户名和密码的提示语
		resp.set('WWW-Authenticate', 'Basic realm=Input User&Password');
		return resp.sendStatus(401);
	}
  
	var user = basicAuth(req);
  
	if (!user || !user.name || !user.pass) {
		return unauthorized(resp);
	}
	  
	// 简单粗暴,用户名直接为User,密码直接为Password
	if (user.name === 'User' && user.pass === 'Password') {
		return next();
	} else {
		return unauthorized(resp);
	}
};

在上面的代码中,basicAuth(req)将从req.headers.authorization中解析出用户输入的用户名和密码,该字段的格式为Basic [base64.encode.string],即以字符串Basic开头,后面跟着一串将用户名和密码经Base64算法编码的文本。将其用Base64解码可得输入的用户名和密码明文。

headers.authorization

headers.authorization

然后需要设置用户认证的链接及对该链接下路径使用basicAuth中间件,代码如下:

app.use('/auth', auth);
app.get('/auth', function(req, resp) {
	resp.status(200).send('Authorization');
});

Express框架中使用应用程序实例对象的use方法来调用一个中间件,该方法的使用方式为

app.use([path], function)

use方法中,