📜  Node.js 中使用 HTTP 标头的基本身份验证

📅  最后修改于: 2022-05-13 01:56:54.948000             🧑  作者: Mango

Node.js 中使用 HTTP 标头的基本身份验证

客户端的身份验证是启动任何应用程序之前的第一步。 Node.js 应用程序中的基本身份验证可以通过 express.js 框架的帮助完成。 Express.js 框架主要用于 Node.js 应用程序,因为它有助于处理和路由客户端使用不同中间件发出的不同类型的请求和响应。

HTTP WWW-Authenticate 标头是一个响应型标头,它支持各种身份验证机制,这些机制对于控制对页面和其他资源的访问也很重要。

认证说明:

模块安装:使用以下命令安装 express 模块。

npm install express

项目结构:

项目结构

文件名- index.js

Javascript
// Requiring module
const express = require("express");
const fs = require("fs");
var path = require('path');
 
const app = express();
 
function authentication(req, res, next) {
    var authheader = req.headers.authorization;
    console.log(req.headers);
 
    if (!authheader) {
        var err = new Error('You are not authenticated!');
        res.setHeader('WWW-Authenticate', 'Basic');
        err.status = 401;
        return next(err)
    }
 
    var auth = new Buffer.from(authheader.split(' ')[1],
    'base64').toString().split(':');
    var user = auth[0];
    var pass = auth[1];
 
    if (user == 'admin' && pass == 'password') {
 
        // If Authorized user
        next();
    } else {
        var err = new Error('You are not authenticated!');
        res.setHeader('WWW-Authenticate', 'Basic');
        err.status = 401;
        return next(err);
    }
 
}
 
// First step is the authentication of the client
app.use(authentication)
app.use(express.static(path.join(__dirname, 'public')));
 
// Server setup
app.listen((3000), () => {
    console.log("Server is Running ");
})


使用以下命令运行index.js

node index.js
  • 在私人窗口中打开任何具有http://localhost:3000位置的浏览器(以避免保存密码和用户名)。地址栏附近会弹出一个弹窗。填写代码中提到的用户名和密码。

  • 如果输入的用户名和密码与提及匹配,则位置index.html将呈现在浏览器上。

说明:第一个中间件用于在服务器启动和客户端输入本地主机地址时检查客户端的身份验证。最初req.headers.authorization未定义,next() 回调函数返回 401 状态码未经授权访问浏览器。客户端填写凭证,凭证以 base64 格式加密。然后解密包含用户名和密码的base64格式数据,然后在检查用户名和密码正确后,next()方法调用认证中间件下面提到的下一个中间件,否则认证表单一次又一次弹出.

请求标头详细信息: