JWT(JSON Web Token)驗證的原理是使用基于 JSON 對象的令牌來驗證用戶身份和權限。JWT 由三部分組成:頭部(header)、載荷(payload)和簽名(signature)。
頭部(header):包含了令牌的類型和簽名算法。通常采用 JSON 表示,例如:{“alg”: “HS256”, “typ”: “JWT”}。
載荷(payload):包含了用戶的一些信息,例如用戶 ID、用戶名、角色等。也可以自定義其他信息。通常采用 JSON 表示,例如:{“userId”: 123456, “username”: “john.doe”, “role”: “admin”}。
簽名(signature):由頭部、載荷和密鑰進行加密生成的簽名。用于驗證令牌的完整性和真實性。簽名通常使用密鑰進行加密,例如使用 HMAC-SHA256 加密算法。
JWT 的驗證過程如下:
客戶端在登錄時,使用用戶名和密碼發送請求到服務器。
服務器驗證用戶名和密碼是否正確,如果正確,生成 JWT 令牌,并將其返回給客戶端。
客戶端收到 JWT 令牌后,將其保存在本地,例如在 localStorage 或者 cookie 中。
客戶端在后續的請求中,將 JWT 令牌放在請求的頭部(通常是 Authorization 頭部)中發送給服務器。
服務器在接收到請求后,從請求頭部中獲取 JWT 令牌,并根據密鑰解析和驗證 JWT 令牌的完整性和真實性。
服務器驗證通過后,根據 JWT 令牌中的信息,進行用戶身份和權限的驗證,然后返回請求的數據或執行相應的操作。
JWT 的驗證原理是通過在客戶端和服務器之間傳遞令牌來驗證用戶身份和權限,避免了服務器存儲用戶狀態的開銷,同時也保證了數據的安全性。但需要注意的是,JWT 令牌被截獲后,任何人都可以使用該令牌來冒充用戶身份,因此需要采取一些措施來保護 JWT 的安全性,例如使用 HTTPS 來加密通信,設置令牌的過期時間,并在令牌中攜帶一些額外的信息來增加驗證的復雜性。