身份驗證與授權

身分驗證到底是什麼?它與授權有何不同?身份驗證是驗證某人是誰的過程,而授權是驗證使用者有權存取哪些特定應用程式、檔案和資料的過程。您如何確保請求存取資源的人是他們聲稱的人?一旦他們的身份得到確認,您如何控制他們可以做什麼或可以看到什麼?

JWT 與會話身份驗證 - 基本差異

JWT(JSON Web Token)基於會話的身份驗證之間的爭論是現代 Web 開發中的一個重要點。

  • JWT 身份驗證:這裡,伺服器產生一個令牌,客戶端儲存該令牌並隨每個請求一起提供。這是一種無狀態方法,這意味著伺服器不需要保留令牌的記錄。

  • 基於會話的身份驗證:相反,它是有狀態的。伺服器為使用者建立會話,並將會話資料儲存在伺服器端。客戶端僅保存會話標識符,通常在 cookie 中。

什麼是JWT?

JSON Web Token (JWT)是一種緊湊且獨立的機制,用於在各方之間以 JSON 物件的形式安全地傳輸資訊。

在此輸入影像描述

JWT結構:

  • 標頭:指定令牌類型 (JWT) 和簽章演算法(例如 HMAC SHA256)。

  • 有效負載:包含聲明,它們是有關實體(使用者)和附加元資料的聲明。

  • 簽名:透過使用秘密對標頭和有效負載進行編碼來建立,確保令牌的完整性。

jwt_dia

JWT 實務:

  • 用戶身份驗證後,伺服器產生 JWT。

  • 該 JWT 會傳送回客戶端並存儲,通常儲存在本機儲存或純 HTTP cookie 中。

  • 用戶端將此令牌包含在後續請求的 HTTP 授權標頭中。

  • 伺服器驗證令牌並在有效時授予存取權限。

優點:

  • 可擴展性:由於其無狀態特性,JWT 非常適合分散式系統。

  • 靈活性:它們可以跨不同的領域和應用程式使用。

  • 安全性:如果實施得當,它們可以提供一種安全的方式來處理使用者身份驗證。

安全問題:

  • 傳輸安全性:透過 HTTPS 傳輸 JWT 至關重要。

  • 儲存:安全儲存 JWT 以防止 XSS 攻擊和其他漏洞。

處理令牌過期:

  • 實施短期 JWT 並使用刷新令牌來更新存取權限,而無需重新驗證。

了解基於會話的身份驗證

基於會話的身份驗證,通常稱為基於 cookie 的身份驗證,是一種伺服器在維護使用者身份驗證記錄方面發揮關鍵作用的方法。

怎麼運作的:

  1. 使用者身份驗證:使用者提供憑證,伺服器驗證該憑證。

  2. 會話建立:成功驗證後,伺服器會建立一個會話記錄,其中包含唯一辨識碼、使用者辨識碼、會話開始時間、到期時間以及可能的其他上下文(例如 IP 位址和使用者代理)。將其儲存在資料庫中。

  3. Cookie 儲存:此會話辨識碼被傳送回並作為 cookie 儲存在使用者的瀏覽器中。

  4. 會話驗證:來自使用者瀏覽器的每個請求都包含此 cookie,然後伺服器透過查詢資料庫來驗證會話。如果有效,則處理該請求。

優點:

  • 簡單性和可靠性:伺服器的會話記錄充當集中的事實來源,使管理使用者會話變得簡單。

  • 撤銷效率:透過刪除或使會話記錄失效,可以快速撤銷存取,確保最新的會話有效性。

缺點:

  • 大規模效能問題:每個會話驗證對資料庫互動的依賴可能會導致延遲,特別是對於高流量應用程式。

  • 動態環境中的延遲:在具有動態客戶端的應用程式中,這種延遲會影響使用者體驗,使得基於會話的身份驗證在這種情況下不太理想。

會話直徑

結論:做出正確的身份驗證選擇

在 JWT 和基於會話的身份驗證之間進行選擇取決於應用程式的特定需求。如果您優先考慮無狀態性和可擴展性,JWT 可能是您的首選。對於直接控制會話至關重要的傳統應用程式,基於會話的身份驗證佔上風。了解這些概念及其含義是開發安全且高效的 Web 應用程式的關鍵。


原文出處:https://dev.to/codeparrot/jwt-vs-session-authentication-1mol


共有 0 則留言