微服務下的用戶登錄權限校驗解決方案


微服務下的用戶登錄權限校驗解決方案

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>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM