理解JWT登入機制

D. L
Dec 12, 2023

--

在現代網站開發中,JSON Web Tokens(JWT)是一種流行的身份驗證和授權機制。以下簡單說明JWT的流程

用戶身份驗證

  1. 用戶輸入資料:用戶在登入表單中輸入他們的憑證,例如用戶名和密碼。
  2. 伺服器驗證:伺服器接收到憑證後,會在資料庫中驗證用戶的身份。

生成JWT

  1. 成功驗證後:一旦用戶被成功驗證,伺服器會創建一個JWT。
  2. JWT結構:JWT通常包含三部分:頭部(Header)、有效負載(Payload)、和簽名(Signature)。
  • 頭部:指定了令牌的類型(通常是JWT)和所使用的簽名算法,如HMAC SHA256或RSA。
  • 有效負載:包含聲明(claims),聲明是關於實體(通常是用戶)和其他數據的陳述。例如,用戶ID、用戶名、過期時間等。
  • 簽名:對頭部和有效負載進行簽名,以驗證消息在傳輸過程中未被篡改。

發送JWT給用戶

  1. 客戶端存儲:伺服器將JWT發送回用戶,用戶端應用程式(如瀏覽器)會將其存儲在本地,通常是在Cookie或LocalStorage中。

JWT的使用

  1. 隨請求發送:之後,當用戶向伺服器發送請求時,會將JWT附加在HTTP請求的授權頭部中。
  2. 伺服器驗證JWT:伺服器會驗證接收到的JWT的簽名,以確保它是有效和可信的。
  3. 授權和存取控制:伺服器根據JWT中的資訊(如用戶角色)進行授權和存取控制。

JWT過期處理

  1. 過期機制:JWT通常包含過期時間。一旦過期,用戶需要重新登入以獲得新的JWT。
  2. 刷新令牌:在某些實現中,系統可能會提供刷新令牌(Refresh Token),用於在不需要用戶重新登入的情況下更新JWT。

優點與考量

  • 無狀態和可擴展性:由於JWT自包含所有用戶信息,伺服器不需要維護用戶的登入狀態,這對於構建可擴展的應用程式很有幫助。
  • 安全性考量:雖然JWT提供了方便的身份驗證機制,但它也帶來了安全挑戰,如JWT的安全存儲、防止XSS和CSRF攻擊等。

--

--