微服務下的用戶登錄權限校驗解決方案
1)方案一:單機tomcat應用登錄校驗
session保存在瀏覽器和應用服務器會話之間,用戶登錄成功,服務端會保存一個session,當然會給客戶端一個sessionId,客戶端會把sessionId保存在cookie中,每次請求都會攜帶這個sessionId
2)方案二:分布式應用中session共享
真實的應用不可能單節點部署,所以就有多個結點登錄session共享的問題需要解決。
-
tomcat支持session共享,但是有廣播風暴,用戶量大的時候,占用資源就很嚴重,不推薦
-
使用redis存儲token:
服務端使用UUID生成隨機64位或128為token,放入redis中,然后返回給客戶端並存儲在cookie中,用戶每次訪問都攜帶此token,服務端去redis中檢驗是否有此用戶即可
3)方案三:JWT(JSON Wen Token)
JWT是一個開放標准,它定義了一種用於簡潔,自包含的用於通信雙方之間以JSON對象的形式安全傳遞信息的方法。JWT可以使用HMAC算法或者是RSA的公鑰密鑰進行簽名。簡單來說,就是通過一定規范來生成token,然后可以通過解密算法逆向解密token,這樣就可以獲取用戶信息。
-
優點:
1)生產的token可以 包含基本信息,比如id、用戶昵稱、頭像等信息,避免再次查庫
2)存儲在客戶端,不占用服務端內存資源
-
缺點:token是經過base64編碼,所以可以解碼,因此token加密前的對象不應該包含敏感信息,如用戶權限,密碼等。
1.JWT格式組成:頭部、負載、簽名
header+payload+signature
- 頭部:主要是描述簽名算法
- 負載:主要描述加密對象的信息,如用戶的id,也可以加些規范里面的東西,如iss簽發者,exp過期時間,sub面向的用戶
- 簽名:主要是把前面兩部分進行加密,防止別人拿到token進行base解密后篡改token
2.JWT客戶端存儲
可以存儲在cookie,localstorage和sessionStorage里面
3.JWT校驗實戰封裝通用方法
1)加入依賴
<!-- JWT相關依賴 -->
<!-- https://mvnrepository.com/artifact/io.jsonwebtoken/jjwt -->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.0</version>
</dependency>