一、JWT簡介
JWT(JSON Web Token)是一種開放標準(RFC 7519),它定義了一種緊湊和自包含的方式,用於在各方之間作為 JSON 對象安全地傳輸信息。JWT 通常用於身份驗證和授權。
JWT 可以被用作你的應用和服務之間的一系列安全信息的字元串。這種字元串可以被使用和傳送,而不需要易受攻擊的授權數據,比如用戶名和密碼。這可以被用來驗證、保證和保護服務和客戶端之間的一系列信息。
二、組成方式
一個JWT是一個純文本字元串,由三個部分組成,它們之間由句點號(.)分隔:
1. Header:由兩個參數組成:alg和typ,分別代表演算法和token類型。
2. Payload:由三部分組成,標準中註冊了七個部分(iss、sub、aud、exp、nbf、iat、jti),分別代表Issuer、Subject、Audience、Expiration Time、Not Before、Issued At、JWT ID。除此之外還可以定義私有欄位,如用戶ID、角色等。
3. Signature:將.Header和.Payload字元串拼接(由 . 隔開),再加上一個密鑰,使用Header中指定的演算法(如HMAC SHA256演算法)生成一個字元串。
三、JWT驗證流程
在用戶登錄成功後,伺服器將JWT token發送給客戶端,客戶端將JWT token保存在本地(通常使用localStorage),在每次向伺服器請求數據時,將token作為請求頭部的Authorization欄位發送到伺服器。伺服器使用密鑰來驗證token的合法性,如果token驗證通過,則允許操作。
//示例代碼 const jwt = require('jsonwebtoken'); const SECRET = 'YOUR_SECRET_KEY'; function createToken(payload) { return jwt.sign(payload, SECRET); } function validateToken(token) { try { return jwt.verify(token, SECRET); } catch (err) { return false; } }
四、優點和缺點
優點:
1. JWT是基於token的機制,無需在伺服器端追蹤用戶狀態;
2. 基於JSON標準,易於使用和解析;
3. 支持跨語言、跨平台;
4. 基於標準,支持廣泛的開發工具包。
缺點如下:
1. 若JWT被泄漏或者被破解,則攻擊者可以訪問相關資源;
2. JWT過期時間需要精細控制;
3. JWT一旦簽發,無法撤回;
4. 在使用JWT時,最好避免在Payload部分存儲敏感信息。
五、應用場景
JWT由於其輕量級、可攜帶性、易驗證和跨語言性等特性,被廣泛應用於單點登錄、跨域授權、API請求身份驗證、移動端驗證、網站授權等領域。
六、總結
從以上幾個方面深入理解JWT組成,更好的應用JWT,這將有助於實現更好的用戶驗證和授權管理。
原創文章,作者:DLWD,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/136609.html