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