node.js中的http身份驗證
上週,在《創建 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中文網其他相關文章!

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

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

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

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

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

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

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

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

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

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