JWT
JWT是什么?
Json web token (JWT)是為了網絡應用環境間傳遞聲明而執行的一種基於JSON的開發標准(RFC7519),該token被設計為緊湊且安全的,特別適用於分布式站點的單點登錄(SSO)場景。JWT的聲明一般被用來在身份提供和服務提供者間傳遞被認證的用戶身份信息,以便於從資源服務器獲取資源,也可以增加一些額外的其它業務邏輯所必須的聲明信息,該token也可以直接被用於認證,也可以加密。
傳統的登錄保持與接口權限是如何實現的?
- 用戶向服務器發送用戶名和密碼。
- 服務器驗證通過后,在當前對話(session)里面保存相關數據,比如用戶角色、登錄時間等等。
- 服務器向用戶返回一個session_id,寫入用戶Cookie。
- 用戶隨后的每一次請求,都會通過Cookie,將session_id傳回服務器。
- 服務器收到session_id,找到前期保存的數據,由此得知用戶的身份。
JWT的數據結構

image.png

image.png

image.png
組成

image.png
JWT的特點
- JWT默認是不加密,但也是可以加密的。生成原始Token以后,可以用密鑰在加密一次。
- JWT不加密的情況下,不能將秘密數據寫入JWT。
- JWT不僅可以用於認證,也可以用於交換信息。有效使用JWT,可以降低服務器查詢數據庫的次數。
- JWT的最大缺點是,由服務器不保存session狀態,因此無法在使用過程中廢止某個token,或者更改token權限。也就是說,一旦JWT簽發了,在到期之前就會始終有效,除非服務器部署額外的邏輯。
- JWT本身包含了認證信息,一旦泄露,任何人都可以獲得該令牌的所有權限。為了減少盜用,JWT的有效期應該設置得比較短。對於一些比較重要的權限,使用時應該再次對用戶進行認證。
- 為了減少盜用,JWT不應該使用HTTP協議明碼傳輸,要使用HTTPS協議傳輸。
RBAC權限模型
基於權限的關系通用模型

image.png
RBAC模塊功能

image.png
RBAC權限控制流程

image.png