目錄
密碼文件
Node.js 集成
限制
首頁 web前端 js教程 node.js中的http身份驗證

node.js中的http身份驗證

Feb 25, 2025 pm 03:32 PM

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

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1677
14
CakePHP 教程
1431
52
Laravel 教程
1334
25
PHP教程
1280
29
C# 教程
1257
24
Python vs. JavaScript:學習曲線和易用性 Python vs. JavaScript:學習曲線和易用性 Apr 16, 2025 am 12:12 AM

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

JavaScript和Web:核心功能和用例 JavaScript和Web:核心功能和用例 Apr 18, 2025 am 12:19 AM

JavaScript在Web開發中的主要用途包括客戶端交互、表單驗證和異步通信。 1)通過DOM操作實現動態內容更新和用戶交互;2)在用戶提交數據前進行客戶端驗證,提高用戶體驗;3)通過AJAX技術實現與服務器的無刷新通信。

JavaScript在行動中:現實世界中的示例和項目 JavaScript在行動中:現實世界中的示例和項目 Apr 19, 2025 am 12:13 AM

JavaScript在現實世界中的應用包括前端和後端開發。 1)通過構建TODO列表應用展示前端應用,涉及DOM操作和事件處理。 2)通過Node.js和Express構建RESTfulAPI展示後端應用。

了解JavaScript引擎:實施詳細信息 了解JavaScript引擎:實施詳細信息 Apr 17, 2025 am 12:05 AM

理解JavaScript引擎內部工作原理對開發者重要,因為它能幫助編寫更高效的代碼並理解性能瓶頸和優化策略。 1)引擎的工作流程包括解析、編譯和執行三個階段;2)執行過程中,引擎會進行動態優化,如內聯緩存和隱藏類;3)最佳實踐包括避免全局變量、優化循環、使用const和let,以及避免過度使用閉包。

Python vs. JavaScript:開發環境和工具 Python vs. JavaScript:開發環境和工具 Apr 26, 2025 am 12:09 AM

Python和JavaScript在開發環境上的選擇都很重要。 1)Python的開發環境包括PyCharm、JupyterNotebook和Anaconda,適合數據科學和快速原型開發。 2)JavaScript的開發環境包括Node.js、VSCode和Webpack,適用於前端和後端開發。根據項目需求選擇合適的工具可以提高開發效率和項目成功率。

C/C在JavaScript口譯員和編譯器中的作用 C/C在JavaScript口譯員和編譯器中的作用 Apr 20, 2025 am 12:01 AM

C和C 在JavaScript引擎中扮演了至关重要的角色,主要用于实现解释器和JIT编译器。1)C 用于解析JavaScript源码并生成抽象语法树。2)C 负责生成和执行字节码。3)C 实现JIT编译器,在运行时优化和编译热点代码,显著提高JavaScript的执行效率。

Python vs. JavaScript:比較用例和應用程序 Python vs. JavaScript:比較用例和應用程序 Apr 21, 2025 am 12:01 AM

Python更適合數據科學和自動化,JavaScript更適合前端和全棧開發。 1.Python在數據科學和機器學習中表現出色,使用NumPy、Pandas等庫進行數據處理和建模。 2.Python在自動化和腳本編寫方面簡潔高效。 3.JavaScript在前端開發中不可或缺,用於構建動態網頁和單頁面應用。 4.JavaScript通過Node.js在後端開發中發揮作用,支持全棧開發。

從網站到應用程序:JavaScript的不同應用 從網站到應用程序:JavaScript的不同應用 Apr 22, 2025 am 12:02 AM

JavaScript在網站、移動應用、桌面應用和服務器端編程中均有廣泛應用。 1)在網站開發中,JavaScript與HTML、CSS一起操作DOM,實現動態效果,並支持如jQuery、React等框架。 2)通過ReactNative和Ionic,JavaScript用於開發跨平台移動應用。 3)Electron框架使JavaScript能構建桌面應用。 4)Node.js讓JavaScript在服務器端運行,支持高並發請求。

See all articles