上週,在《創建 Node.js HTTP 服務器》一文中,我介紹了 Node.js 中 HTTP 的基礎知識。今天的文章將向您展示如何使用 HTTP 身份驗證來保護您的 Node.js 站點免受密碼攻擊。我們將首先介紹基本的訪問身份驗證,然後轉向更安全的摘要訪問身份驗證。
關鍵要點
htpasswd
用於管理基本訪問身份驗證中的密碼文件,而 htdigest
實用程序用於摘要訪問身份驗證。密碼存儲在服務器端的密碼文件中,http-auth
模塊用於向 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>
下一步是向我們的 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
為了將摘要身份驗證集成到我們的服務器中,我們將再次使用 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中文網其他相關文章!