網站登入憑證解析:從號碼牌到 Cookie 與 JWT 的運作機制

更新日期: 2024 年 11 月 14 日

在網站登入系統中,憑證用於驗證使用者身份,確保安全的資料交換。

除了傳統的 Cookie 之外,JSON Web Token (JWT) 也是一種常見的憑證機制。

JWT 提供了更靈活的方式來傳遞和驗證使用者資訊。

本文將從客戶端、伺服器和 JWT 憑證的角度出發,介紹其在登入系統中的應用。

登入憑證的運作方式

網站登入可以類比於我們在購買手搖飲時,店家提供號碼牌的方式。

網站會在使用者登入後提供一個憑證來證明其身份,讓使用者能夠存取個人資料或私有內容。

客戶端的登入憑證:取得號碼牌

在網站使用者(客戶端)登入後,會取得一張號碼牌作為憑證。

網站會生成唯一的憑證代碼,並保存在 Cookie 或其他存儲方式中(例如 Local Storage)。

在使用 JWT 時,這個憑證就是加密的 JSON 字串(Token),用於後續的請求驗證。

伺服器的登入憑證:製作飲料的參考

伺服器會根據使用者提供的憑證來驗證其身份。

當伺服器接收到有效的憑證時,就可以根據使用者的身份調用相關資料。

例如,JWT 是一種無狀態的憑證格式,可以直接包含使用者的身份資訊,讓伺服器無需存儲會話資料。

JWT 憑證的作用與運作方式

JWT 是一種自包含的憑證格式,它是一段加密的字串,包含了使用者資訊和簽名,用來驗證用戶身份。

JWT 的典型結構為三部分:Header(標頭)、Payload(負載)、Signature(簽名),使用點號 . 隔開。

JWT 的三部分結構

  1. Header(標頭):說明 Token 的類型和加密算法,例如 {"alg": "HS256", "typ": "JWT"}
  2. Payload(負載):包含使用者的身份資訊,例如使用者 ID 或角色權限。這部分可以自訂。
  3. Signature(簽名):由 Header 和 Payload 經過加密算法生成,用於驗證 Token 的真實性。

JWT 的存儲與傳遞

JWT 可以儲存在 Local Storage 或 Cookie 中,並隨後在每次請求中通過 Authorization 標頭傳遞給伺服器。

伺服器接收 JWT 後會解碼驗證簽名,確認 Token 的有效性。

JWT 與 Cookie 的比較

  • 無狀態(Stateless):JWT 是無狀態的,使用者資訊直接包含在 Token 中。伺服器不需存儲會話資訊,減輕了伺服器的負擔,適合分散式系統。
  • 有效期限:JWT 本身內建有效期限,但不像 Cookie 可以自動過期和刷新。為了安全性,通常使用短期 JWT,並搭配 Refresh Token 機制以延長有效期。
  • 安全性:由於 JWT 包含敏感資訊,建議使用 HTTPS 傳輸,並考慮將 JWT 存儲在 Cookie 且設置為 HTTP-only,防止 JavaScript 獲取。

JWT 的刷新機制

JWT 憑證通常有較短的有效期,過期後會失效,使用者需要重新登入以取得新的 Token。

然而,若使用 Refresh Token 機制,可以在不重新登入的情況下自動取得新 Token:

  1. 當 JWT 快到期時,前端會檢查並發送 Refresh Token 給伺服器。
  2. 伺服器驗證 Refresh Token 後,生成並返回一個新的 JWT,延長登入狀態。

結論

JWT 是一種靈活且無狀態的憑證機制,可以方便地攜帶使用者資訊並確保安全傳遞。

相比於傳統的 Cookie 會話管理,JWT 減輕了伺服器負擔,適合應用於需要分散式授權的環境中。

透過 JWT 和 Refresh Token 的配合,網站能在提供良好使用者體驗的同時,確保登入流程的安全性。

Similar Posts