認證小教室|理解 Passport 和 JWT 的認證流程

閱讀時間約 8 分鐘

關於這篇文章:

在現代應用程式中,使用者認證是不可或缺的一部分。本文將為您深入淺出地介紹兩個重要的認證工具:Passport 和 JWT。本篇文章將帶你了解:

  • Passport 是什麼? 簡單的身份驗證中介軟體,讓多種登入方式變得容易。
  • JWT 是什麼? 一種 stateless 認證方式,能減輕伺服器負擔。
  • 傳統 Session-basedToken-based 認證方式的區別。
  • Stateful(有狀態)Stateless(無狀態)認證方式的區別。
  • Passport 和 JWT 如何協同工作?無論您是初學者還是有經驗的開發者,希望這篇文章都能幫助您更好地理解現代web認證機制。讓我們開始吧!

在解釋 Passport 跟 JWT 之間的流程前,讓我們先來了解它們各自的角色:

  • Passport
    是一個用於 Node.js 的身份驗證中介軟體,提供了多種身份驗證方式,無論是傳統的帳號密碼,還是通過Google、Facebook等第三方登入,Passport都能輕鬆應對。它就像一個智慧門鎖,幫助開發者快速整合各種登入方式。
  • JWT (JSON Web Token)
    JWT則像是一個智能通行證,它是一種 token-based 的 stateless 認證方式。當用戶成功登入後,伺服器會發出一個加密過的 token,這個 token 包含了用戶的驗證信息,並儲存在客戶端。每次請求時,客戶端會將這個 token 附帶在請求中,伺服器則用這個 token 來驗證用戶身份。

傳統 Session vs. 現代 Token

在JWT出現之前,伺服器最常使用 session-based 的傳統認證方式,這種方法需要依賴伺服器來保存用戶的登入狀態,以下會以圖書館的借書證系統白話舉例:

  1. 用戶登入:就像你去圖書館辦借書證。
    (用戶提供憑證(如帳號和密碼),伺服器驗證後,會創建一個 session 並儲存用戶相關的狀態資訊。)
  2. 伺服器創建session:圖書館為你建立一個借書記錄。
  3. 發送 session ID:你得到一張借書證(存在cookie裡)。
    (伺服器將生成的一個唯一的 session ID 存儲在 cookie 中,並發送給用戶。)
  4. 用戶每次請求時攜帶 session ID:你每次借書都要出示這張借書證。
    (之後每次請求用戶都會攜帶這個 session ID,伺服器則透過這個 ID 查找用戶的會話資料。)
  5. 伺服器驗證 session:圖書館查你的借書記錄來確認身份。
    (伺服器根據 session ID 來驗證用戶的身份。)

而這種方法就稱為 stateful(有狀態)認證,因為伺服器需要記住每個用戶的狀態,就像圖書館要記住每個人的借書情況。


但是隨著應用規模越來越大,這種方法開始力不從心:

  1. 擴展困難:想像一下,如果圖書館分店越開越多,要同步所有人的借書記錄會有多麻煩。
    (每個伺服器需要保存大量的 session,且在多個伺服器之間同步 session 變得複雜。)
  2. 伺服器負擔重:記錄太多,圖書館的電腦可能會變得很慢。
    (伺服器需要處理和管理大量的會話資料,當用戶增多時,性能就會下降。)

為了解決上面這些問題,JWT 這種 stateless 認證的機制就此而生。


Token-based 認證:智能通行證時代

Token-based 顧名思義,就是一種通過發送短暫的憑證(token)來驗證使用者身份的方式,就像是使用智能的通行證:

  1. 用戶登入:你還是要先證明身份。
    (使用者提供憑證,也就是輸入帳號和密碼,並成功通過伺服器的認證。)
  2. 伺服器發送 token:但這次你得到的是一個智能通行證(JWT)。
    (伺服器產生一個唯一的 token,發送給用戶。這個 token 是一串由伺服器簽發的字元,包含用戶的相關資訊和認證有效期。)
  3. 用戶持有 token:你把這個通行證存在手機裡。
    (之後用戶在每次向伺服器發送請求時,會將這個 token 作為身份驗證憑證。)
  4. 每次請求帶上token:你要用服務時,出示這個通行證就行。
  5. 伺服器驗證 token:最後伺服器只需要檢查 token 是否有效來確認用戶的身份,而不再需要反覆檢查用戶名和密碼。

Token-based 的『優點』:

  • token 是一次性生成的,並且有時效性,當 token 過期時就需要重新認證。
  • token 可以儲存在瀏覽器的本地存儲、cookie 等中,避免每次都要重新登入。


Stateless(無狀態)認證 就是服務器不記得你是誰,但它相信你的通行證(token)。每次你來,它只看通行證,不查詢歷史記錄。
(伺服器不會儲存用戶的狀態資訊。當每次用戶發出請求時,伺服器不需要查看以前的登入紀錄或狀態,而是依靠每次請求攜帶的 token 來進行身份驗證。)

Stateless 的『優點』:

  • 減少伺服器負擔:因為伺服器不需要記住誰是誰(不需要保存用戶的 session 資訊),所以伺服器會變得更輕鬆,不需要額外花費時間和資源去保存每個人的資料,特別是在大量用戶同時訪問時,效能的提升會很明顯。
  • 擴展性強:如果有多個伺服器,它們不需要互相告訴對方誰來過,每個伺服器只要能讀懂通行證就行。

Passport 和 JWT 的完美配合

現在,讓我們看看 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,並將它儲存在瀏覽器的 localStoragesessionStorage,或者 cookie 內(具體看應用需求和安全性考量)。

⓹ 前端在 API 請求中使用 JWT token:
➔ 每當前端發出需要身份驗證的 API 請求時,會將這個 token 附加到請求的 Authorization 頭部中。後端收到這個請求後,會驗證 token 是否有效,從而判斷該請求是否有權限執行。


通過這種方式,Passport 負責嚴格的入口驗證,而 JWT 則提供了輕量級的持續身份確認,兩者完美配合,既保證了安全性,又提高了效率。


技術在不斷發展,安全標準也在不斷提高。保持學習和更新知識是每個開發者的必修課。希望這篇文章能讓你對 Passport 和 JWT 的認證流程有更深入的了解,如果您對文章內容有任何疑問、補充或建議,還請不吝賜教!您的每一個回饋都是幫助我們共同進步的寶貴資源,讓我們一起在這個充滿挑戰和機遇的領域中成長吧!


avatar-img
0會員
2內容數
這裡是我的學習日記,主要記錄我在程式開發旅程中遇到的挑戰,以及問題的解決過程。希望我的筆記能夠幫助到和我一樣正在努力學習的夥伴們! 除了程式分享,這裡還會偶爾更新我身為寵物保姆的照顧小故事,還有一些我畫的寵物似顏繪作品 🐾。 如果你看到內容有任何錯誤或覺得有需要補充的地方,隨時歡迎與我交流,我非常樂於學習和成長!
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
DevPaws Journal 的其他內容
這篇文章介紹瞭如何利用正則表達式來驗證網址格式,並詳細解釋每個符號的作用。文章也簡要說明瞭 HTTP 和 HTTPS 之間的差異,並探討了現代網站為何傾向於使用 HTTPS 以保障資料安全。此外,還提供了測試範例,讓讀者能更好理解網址驗證的過程和原理。
這篇文章介紹瞭如何利用正則表達式來驗證網址格式,並詳細解釋每個符號的作用。文章也簡要說明瞭 HTTP 和 HTTPS 之間的差異,並探討了現代網站為何傾向於使用 HTTPS 以保障資料安全。此外,還提供了測試範例,讓讀者能更好理解網址驗證的過程和原理。
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
在今天全球化的背景下,越來越多的人士需要辦理台胞證,這不僅僅是一份文件,更是跨越兩岸的橋樑。然而,對許多人來說,辦理台胞證可能是一個陌生而複雜的過程。這時候,一個可信賴的台胞證代辦服務就顯得尤為重要。 客戶信任的關鍵因素 在客戶選擇台胞證代辦服務時,信任是他們最關心的問題之一。一個有效的台胞
Thumbnail
在當今全球化的社會中,許多人因工作、學習或旅遊等原因,需要辦理各種證件。對於許多台灣居民來說,台胞證和簽證是經常涉及的兩種重要證件。然而,這兩者之間有何區別?本文將重點探討台胞證代辦與簽證代辦的區別,並針對性地介紹相關辦理流程及注意事項。 什麼是台胞證? 台胞證,全稱為台灣居民來往大陸通行證
Thumbnail
台胞證是台灣居民進入中國大陸的必要證件,隨著兩岸交流日益頻繁,台胞證的申請和辦理需求也越來越多樣化和國際化。本文將探討台胞證代辦服務的國際化發展,並介紹相關的辦理流程、有效期限、照片規格等實用資訊。 台胞證代辦服務的現狀 大眾旅行社的角色 大眾旅行社作為知名的代辦服務機構,提供全面的台胞證
Thumbnail
準備上傳的資料 護照圖片檔: 彩色護照照片頁&簽名頁,檔案格式JPEG/PNG,檔案需小於300KB 大頭照: 護照標準照片,圖片檔JPEG/PNG,檔案需小於300KB
Thumbnail
在現代國際貿易與跨國事務中,文件的真偽認證至關重要,因此需要進行海牙認證,讓文件經文件發出地及使用地認可內容。但台灣不是海牙公約成員國可以辦理海牙認證嗎?台灣海牙認證流程
Thumbnail
你有遇過文件要拿出國用的情況嗎?出國留學、結婚、移民、公司跨國交易等等台灣的文件都要拿到外國用,想直接用但被要求做認證,要怎麼認證?海牙認證又是甚麼?
Thumbnail
現在到日本旅遊入境最方便的是事先申請VJW 在台灣填好資料後 入境只要刷QR碼就可以通關了, 而2024年變得更加便利了 原本入境加報關兩個條碼合併成一個條碼 還有家人可以用同一隻手機通關 也就是在自己的帳號之下按登錄家人 幫所有家人填寫VJW 所有人的資料綁在同一個帳號 只有
Thumbnail
準備上傳的資料 彩色的護照照片頁面&簽名頁的電子檔 護照標準的大頭照的電子檔 住宿確認信的電子檔 + 行程 航班證明的電子檔 申請流程 點開肯亞官方簽證網站:https://www.etak
Thumbnail
申請攜碼優惠前,先讓我們看看這些常見疑問! 攜碼需要準備的資料 身分證和健保卡或駕照 如果委託他人代辦,需攜帶雙方的身分證和健保卡或駕照,以及門號登記者的印章 公司戶申辦需要攜帶營業登記證、變更登記表(擇一)、負責人身分證和健保卡或駕照,以及公司大小章 是否需要先解約? 只要原電信業者的
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
在今天全球化的背景下,越來越多的人士需要辦理台胞證,這不僅僅是一份文件,更是跨越兩岸的橋樑。然而,對許多人來說,辦理台胞證可能是一個陌生而複雜的過程。這時候,一個可信賴的台胞證代辦服務就顯得尤為重要。 客戶信任的關鍵因素 在客戶選擇台胞證代辦服務時,信任是他們最關心的問題之一。一個有效的台胞
Thumbnail
在當今全球化的社會中,許多人因工作、學習或旅遊等原因,需要辦理各種證件。對於許多台灣居民來說,台胞證和簽證是經常涉及的兩種重要證件。然而,這兩者之間有何區別?本文將重點探討台胞證代辦與簽證代辦的區別,並針對性地介紹相關辦理流程及注意事項。 什麼是台胞證? 台胞證,全稱為台灣居民來往大陸通行證
Thumbnail
台胞證是台灣居民進入中國大陸的必要證件,隨著兩岸交流日益頻繁,台胞證的申請和辦理需求也越來越多樣化和國際化。本文將探討台胞證代辦服務的國際化發展,並介紹相關的辦理流程、有效期限、照片規格等實用資訊。 台胞證代辦服務的現狀 大眾旅行社的角色 大眾旅行社作為知名的代辦服務機構,提供全面的台胞證
Thumbnail
準備上傳的資料 護照圖片檔: 彩色護照照片頁&簽名頁,檔案格式JPEG/PNG,檔案需小於300KB 大頭照: 護照標準照片,圖片檔JPEG/PNG,檔案需小於300KB
Thumbnail
在現代國際貿易與跨國事務中,文件的真偽認證至關重要,因此需要進行海牙認證,讓文件經文件發出地及使用地認可內容。但台灣不是海牙公約成員國可以辦理海牙認證嗎?台灣海牙認證流程
Thumbnail
你有遇過文件要拿出國用的情況嗎?出國留學、結婚、移民、公司跨國交易等等台灣的文件都要拿到外國用,想直接用但被要求做認證,要怎麼認證?海牙認證又是甚麼?
Thumbnail
現在到日本旅遊入境最方便的是事先申請VJW 在台灣填好資料後 入境只要刷QR碼就可以通關了, 而2024年變得更加便利了 原本入境加報關兩個條碼合併成一個條碼 還有家人可以用同一隻手機通關 也就是在自己的帳號之下按登錄家人 幫所有家人填寫VJW 所有人的資料綁在同一個帳號 只有
Thumbnail
準備上傳的資料 彩色的護照照片頁面&簽名頁的電子檔 護照標準的大頭照的電子檔 住宿確認信的電子檔 + 行程 航班證明的電子檔 申請流程 點開肯亞官方簽證網站:https://www.etak
Thumbnail
申請攜碼優惠前,先讓我們看看這些常見疑問! 攜碼需要準備的資料 身分證和健保卡或駕照 如果委託他人代辦,需攜帶雙方的身分證和健保卡或駕照,以及門號登記者的印章 公司戶申辦需要攜帶營業登記證、變更登記表(擇一)、負責人身分證和健保卡或駕照,以及公司大小章 是否需要先解約? 只要原電信業者的