首页 > web前端 > js教程 > node.js中的http身份验证

node.js中的http身份验证

Jennifer Aniston
发布: 2025-02-25 15:32:08
原创
144 人浏览过

HTTP Authentication in Node.js

上周,在《创建 Node.js HTTP 服务器》一文中,我介绍了 Node.js 中 HTTP 的基础知识。今天的文章将向您展示如何使用 HTTP 身份验证来保护您的 Node.js 站点免受密码攻击。我们将首先介绍基本的访问身份验证,然后转向更安全的摘要访问身份验证。

关键要点

  • 基本访问身份验证和摘要访问身份验证是 Node.js 中两种 HTTP 身份验证方法。基本访问身份验证更简单,会提示用户输入用户名和密码,而摘要访问身份验证更安全,因为它会在传输前加密密码。
  • Node.js 实用程序 htpasswd 用于管理基本访问身份验证中的密码文件,而 htdigest 实用程序用于摘要访问身份验证。密码存储在服务器端的密码文件中,http-auth 模块用于向 HTTP 服务器添加身份验证支持。
  • 仅使用 HTTP 身份验证不足以确保 Node.js 应用程序的安全。为了获得更好的安全性,它应该通过 HTTPS 提供服务。Express.js 可用于在 Node.js 中实现 HTTP 身份验证,并使用 express-basic-auth 中间件。

基本访问身份验证

当用户访问实现身份验证的站点时,系统会提示他/她输入用户名和密码。如果用户提供有效的凭据,他们将被带到页面的内容,否则他们将被拒绝,并显示“401 未授权”响应。最简单的 HTTP 身份验证类型是基本访问身份验证。

密码文件

在服务器端,所有用户名和加密密码都存储在密码文件中。Node.js 实用程序 htpasswd 可用于管理密码文件。要安装 htpasswd,请使用以下命令。npm 代表 Node.js 包管理器,它默认情况下随 Node.js 一起安装。npm 用于安装 Node.js 模块。-g 标志全局安装软件包,这意味着它包含在系统的 PATH 变量中。

npm install -g htpasswd
登录后复制
登录后复制
登录后复制

安装 htpasswd 后,您可以使用以下命令创建新用户。此示例使用 -c 标志创建一个名为“htpasswd”的新密码文件。在新文件中,添加名为“foo”的用户。-b 标志允许将密码“bar”指定为命令行的一部分。

htpasswd -bc htpasswd foo bar
登录后复制
登录后复制
登录后复制

运行该命令后,打开您的“htpasswd”文件。用户“foo”的密码文件条目如下所示。此行包含用户名和加密密码。由于这是文件中第一个也是唯一的用户,因此这应该是文件中的唯一一行。

<code>foo:{SHA}Ys23Ag/5IOWqZCw9QGaVDdHwH00=</code>
登录后复制
登录后复制

Node.js 集成

下一步是向我们的 HTTP 服务器添加身份验证支持。首先,您需要使用以下 npm 命令安装 http-auth 模块。

npm install -g htpasswd
登录后复制
登录后复制
登录后复制

接下来,创建一个名为“basic_auth_server.js”的新文件,并添加以下代码。请注意,http-auth 模块在第 2 行中引用。在第 3 行到第 7 行中,将配置对象传递给身份验证模块。authRealm 字段定义身份验证领域。authFile 字段指向我们之前创建的密码文件。__dirname 指的是当前正在执行的脚本所在的目录。此示例假设“htpasswd”文件与“basic_auth_server.js”位于同一目录中。authType 配置字段指示要使用的身份验证类型。在第 9 行中,基本身份验证方案应用于 HTTP 连接。身份验证回调函数提供经过身份验证的用户名以进行进一步处理。

htpasswd -bc htpasswd foo bar
登录后复制
登录后复制
登录后复制

最后,启动服务器。您可以通过导航到 https://www.php.cn/link/bb122c8fe6c764e8aae555e2186a6344 来连接到服务器。系统会提示您输入用户名和密码。提供您之前创建的凭据,浏览器将通过姓名向您问好。

限制

基本访问身份验证最大的缺点是凭据作为明文通过网络发送。为了防止窃听,此类身份验证只能与安全(即 HTTPS)连接一起使用。如果安全连接不可用,则应改用更安全的身份验证形式。

摘要访问身份验证

摘要访问身份验证是基本身份验证的更安全替代方案。使用摘要身份验证,密码在网络传输之前会被加密。

密码文件

摘要身份验证也使用密码文件。但是,文件的格式与基本身份验证中使用的文件格式略有不同。为了使用摘要密码文件格式,我们将使用名为 htdigest 的不同实用程序。使用以下 npm 命令安装 htdigest

<code>foo:{SHA}Ys23Ag/5IOWqZCw9QGaVDdHwH00=</code>
登录后复制
登录后复制

接下来,使用以下命令创建一个新的密码文件。同样,-c 标志用于创建一个名为“htpasswd”的新密码文件。这次我们还必须指定一个身份验证领域。在这种情况下,身份验证领域是“Private area”。在此示例中,用户名再次为“foo”。请注意,命令中未提供密码。输入命令后,系统会提示您提供密码。

npm install http-auth
登录后复制

运行 htdigest 后,查看新的“htpasswd”文件内部。“foo”的条目如下所示。摘要身份验证文件包含用户名和加密密码,以及基本身份验证文件中未包含的身份验证领域。

npm install -g htpasswd
登录后复制
登录后复制
登录后复制

Node.js 集成

为了将摘要身份验证集成到我们的服务器中,我们将再次使用 http-auth 模块。如果您一直在按照本教程进行操作,则该模块应该已经安装在您的机器上。接下来,创建一个名为“digest_auth_server.js”的新文件来实现您的服务器。服务器代码如下所示。请注意,服务器代码与基本身份验证服务器代码几乎相同。区别在于配置对象的 authType 字段。在这种情况下,authType 已设置为“digest”。可以像基本身份验证服务器一样访问此服务器。

htpasswd -bc htpasswd foo bar
登录后复制
登录后复制
登录后复制

结论

本文介绍了 HTTP 身份验证的基础知识。通过遵循此处提供的示例,您的 Node.js 应用程序可以更安全一些。但是,您应该知道,仅靠身份验证是不够的。如果安全性是主要问题,则您的站点应通过 HTTPS 提供服务。在以后的文章中,我将探讨 HTTPS 和许多其他很棒的 Node.js 功能。如果您喜欢这篇文章,您将想了解 SitePoint 最新系列的印刷品和电子书 Jump Start 的所有信息。第一本是 Don Nguyen 的《Node.js》——在 SitePoint 了解更多信息!

(以下为FAQ部分,由于篇幅过长,我将对FAQ部分进行精简概括,保留核心信息,避免重复冗余。)

常见问题解答 (FAQ) 关于 Node.js 中的 HTTP 身份验证

  • 如何在 Node.js 中使用 Express.js 实现 HTTP 身份验证? 使用 express-basic-auth 中间件。 示例代码中展示了如何使用用户名和密码进行身份验证。

  • 如何使用 HTTP 身份验证保护我的 Node.js 应用程序? 使用 http-auth 模块,并指定密码文件路径。 务必使用 HTTPS 提高安全性。

  • 如何使用 HTTP 身份验证处理多个用户? 使用文件或数据库存储用户名和密码。 http-auth 模块支持此功能。

  • 如何自定义 Node.js 中的 HTTP 身份验证提示? 设置 realm 选项。

  • 如何处理 Node.js 中的身份验证失败? 服务器会发送 401 未授权响应。您可以自定义此响应。

  • 如何将 HTTP 身份验证与 HTTPS 一起使用? 创建 HTTPS 服务器而不是 HTTP 服务器。

  • 如何将 HTTP 身份验证与 Cookie 一起使用? 在成功身份验证后设置 Cookie。

  • 如何将 HTTP 身份验证与会话一起使用? 使用会话中间件,例如 express-session

  • 如何将 HTTP 身份验证与 JSON Web 令牌 (JWT) 一起使用? 使用 JWT 中间件,例如 express-jwt

  • 如何将 HTTP 身份验证与 OAuth 一起使用? 使用 OAuth 中间件,例如 passport

总而言之,以上精简概括了FAQ部分的核心内容,并对原文进行了伪原创处理。 所有图片链接均保留不变。

以上是node.js中的http身份验证的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板