身分驗證到底是什麼?它與授權有何不同?身份驗證是驗證某人是誰的過程,而授權是驗證使用者有權存取哪些特定應用程式、檔案和資料的過程。您如何確保請求存取資源的人是他們聲稱的人?一旦他們的身份得到確認,您如何控制他們可以做什麼或可以看到什麼?
JWT(JSON Web Token)和基於會話的身份驗證之間的爭論是現代 Web 開發中的一個重要點。
JWT 身份驗證:這裡,伺服器產生一個令牌,客戶端儲存該令牌並隨每個請求一起提供。這是一種無狀態方法,這意味著伺服器不需要保留令牌的記錄。
基於會話的身份驗證:相反,它是有狀態的。伺服器為使用者建立會話,並將會話資料儲存在伺服器端。客戶端僅保存會話標識符,通常在 cookie 中。
JSON Web Token (JWT)是一種緊湊且獨立的機制,用於在各方之間以 JSON 物件的形式安全地傳輸資訊。
標頭:指定令牌類型 (JWT) 和簽章演算法(例如 HMAC SHA256)。
有效負載:包含聲明,它們是有關實體(使用者)和附加元資料的聲明。
簽名:透過使用秘密對標頭和有效負載進行編碼來建立,確保令牌的完整性。
用戶身份驗證後,伺服器產生 JWT。
該 JWT 會傳送回客戶端並存儲,通常儲存在本機儲存或純 HTTP cookie 中。
用戶端將此令牌包含在後續請求的 HTTP 授權標頭中。
伺服器驗證令牌並在有效時授予存取權限。
可擴展性:由於其無狀態特性,JWT 非常適合分散式系統。
靈活性:它們可以跨不同的領域和應用程式使用。
安全性:如果實施得當,它們可以提供一種安全的方式來處理使用者身份驗證。
傳輸安全性:透過 HTTPS 傳輸 JWT 至關重要。
儲存:安全儲存 JWT 以防止 XSS 攻擊和其他漏洞。
基於會話的身份驗證,通常稱為基於 cookie 的身份驗證,是一種伺服器在維護使用者身份驗證記錄方面發揮關鍵作用的方法。
使用者身份驗證:使用者提供憑證,伺服器驗證該憑證。
會話建立:成功驗證後,伺服器會建立一個會話記錄,其中包含唯一辨識碼、使用者辨識碼、會話開始時間、到期時間以及可能的其他上下文(例如 IP 位址和使用者代理)。將其儲存在資料庫中。
Cookie 儲存:此會話辨識碼被傳送回並作為 cookie 儲存在使用者的瀏覽器中。
會話驗證:來自使用者瀏覽器的每個請求都包含此 cookie,然後伺服器透過查詢資料庫來驗證會話。如果有效,則處理該請求。
簡單性和可靠性:伺服器的會話記錄充當集中的事實來源,使管理使用者會話變得簡單。
撤銷效率:透過刪除或使會話記錄失效,可以快速撤銷存取,確保最新的會話有效性。
大規模效能問題:每個會話驗證對資料庫互動的依賴可能會導致延遲,特別是對於高流量應用程式。
動態環境中的延遲:在具有動態客戶端的應用程式中,這種延遲會影響使用者體驗,使得基於會話的身份驗證在這種情況下不太理想。
在 JWT 和基於會話的身份驗證之間進行選擇取決於應用程式的特定需求。如果您優先考慮無狀態性和可擴展性,JWT 可能是您的首選。對於直接控制會話至關重要的傳統應用程式,基於會話的身份驗證佔上風。了解這些概念及其含義是開發安全且高效的 Web 應用程式的關鍵。
原文出處:https://dev.to/codeparrot/jwt-vs-session-authentication-1mol