在原來的單體系統中,有狀態服務,即服務端須要記錄每次會話的客戶端信息,從而識別客戶端身份,根據用戶身份進行請求的處理,session+cookie。在現在的大多數分佈式系統中,暴露出不少缺點算法
在分佈式/微服務中,服務的無狀態性更加的重要,即:瀏覽器
帶來的好處是什麼呢?安全
整個登陸過程當中,最關鍵的點是什麼?服務器
token的安全性cookie
token是識別客戶端身份的惟一標示,若是加密不夠嚴密,被人僞造那就完蛋了。
採用何種方式加密纔是安全可靠的呢?
咱們將採用JWT + RSA非對稱加密
session
JWT,全稱是Json Web Token, 是JSON風格輕量級的受權和身份認證規範,可實現無狀態、分佈式的Web應用受權; 參考jwt官網分佈式
JWT包含三部分數據:微服務
Header:頭部,一般頭部有兩部分信息:加密
咱們會對頭部進行base64加密(可解密),獲得第一部分數據code
Payload:載荷,就是有效數據,通常包含下面信息:
這部分也會採用base64加密,獲得第二部分數據
Signature:簽名,是整個數據的認證信息。通常根據前兩步的數據,再加上服務的的密鑰(secret)(不要泄漏,最好週期性更換),經過加密算法生成。用於驗證整個數據完整和可靠性
生成的數據:
一、用戶登陸
二、服務的認證,經過後根據secret生成token
三、將生成的token返回給瀏覽器
四、用戶每次請求攜帶token
五、服務端利用公鑰解讀jwt簽名,判斷簽名有效後,從Payload中獲取用戶信息
六、處理請求,返回響應結果