關於這篇文章:
在現代應用程式中,使用者認證是不可或缺的一部分。本文將為您深入淺出地介紹兩個重要的認證工具:Passport 和 JWT。本篇文章將帶你了解:
在解釋 Passport 跟 JWT 之間的流程前,讓我們先來了解它們各自的角色:
Node.js
的身份驗證中介軟體,提供了多種身份驗證方式,無論是傳統的帳號密碼,還是通過Google、Facebook等第三方登入,Passport都能輕鬆應對。它就像一個智慧門鎖,幫助開發者快速整合各種登入方式。在JWT出現之前,伺服器最常使用 session-based
的傳統認證方式,這種方法需要依賴伺服器來保存用戶的登入狀態,以下會以圖書館的借書證系統白話舉例:
就像你去圖書館辦借書證。
圖書館為你建立一個借書記錄。
你得到一張借書證(存在cookie裡)。
你每次借書都要出示這張借書證。
圖書館查你的借書記錄來確認身份。
而這種方法就稱為 stateful(有狀態)認證
,因為伺服器需要記住每個用戶的狀態,就像圖書館要記住每個人的借書情況。
但是隨著應用規模越來越大,這種方法開始力不從心:
想像一下,如果圖書館分店越開越多,要同步所有人的借書記錄會有多麻煩。
記錄太多,圖書館的電腦可能會變得很慢。
為了解決上面這些問題,JWT 這種 stateless 認證的機制就此而生。
Token-based
顧名思義,就是一種通過發送短暫的憑證(token)來驗證使用者身份的方式,就像是使用智能的通行證:
你還是要先證明身份。
但這次你得到的是一個智能通行證(JWT)。
你把這個通行證存在手機裡。
Token-based 的『優點』:
Stateless(無狀態)認證
就是服務器不記得你是誰,但它相信你的通行證(token)。每次你來,它只看通行證,不查詢歷史記錄。
(伺服器不會儲存用戶的狀態資訊。當每次用戶發出請求時,伺服器不需要查看以前的登入紀錄或狀態,而是依靠每次請求攜帶的 token 來進行身份驗證。)
Stateless 的『優點』:
現在,讓我們看看 Passport 和 JWT 是如何一起工作的:
⓵ 用 Passport 檢查身份:Passport 負責初始的身份驗證,就像機場的安檢。如果你的證件沒問題(帳密正確或第三方登入成功),Passport 就會放行。
➔ 後端工程師會使用 Passport 來處理使用者的登入邏輯。這包括驗證帳號密碼或使用第三方登入(例如 Google、Facebook 等)。如果使用者提供的登入資訊正確(例如:帳號密碼匹配,或是第三方登入成功),Passport 會回傳一個認證成功的結果。
⓶ 生成 JWT token:通過安檢後,會給你一張登機證。
➔ 當 Passport 驗證成功後,後端會生成一個 JWT token,這個 token 包含使用者的一些基本資訊(例如:用戶 ID、角色等),並且會被加密。
⓷ 將 JWT token 發送給前端:
➔ 驗證成功後,後端將這個 JWT token 傳送給前端(通常是回應的一部分)。這代表前端現在有了用來進行未來 API 請求的認證方式。
⓸ 前端儲存 JWT token:
➔ 前端工程師會接收到這個 JWT token,並將它儲存在瀏覽器的 localStorage、sessionStorage,或者 cookie 內(具體看應用需求和安全性考量)。
⓹ 前端在 API 請求中使用 JWT token:
➔ 每當前端發出需要身份驗證的 API 請求時,會將這個 token 附加到請求的 Authorization 頭部中。後端收到這個請求後,會驗證 token 是否有效,從而判斷該請求是否有權限執行。
通過這種方式,Passport 負責嚴格的入口驗證,而 JWT 則提供了輕量級的持續身份確認,兩者完美配合,既保證了安全性,又提高了效率。
技術在不斷發展,安全標準也在不斷提高。保持學習和更新知識是每個開發者的必修課。希望這篇文章能讓你對 Passport 和 JWT 的認證流程有更深入的了解,如果您對文章內容有任何疑問、補充或建議,還請不吝賜教!您的每一個回饋都是幫助我們共同進步的寶貴資源,讓我們一起在這個充滿挑戰和機遇的領域中成長吧!