Spring Cloud微服務下的權限架構調研


  隨着微服務架構的流行,系統架構調整,項目權限系統模塊開發提上日程,需要對權限架構進行設計以及技術選型。所以這段時間看了下相關的資料,做了幾個對比選擇。

一、架構圖

  初步設想的架構如下,結構很簡單:eureka為服務注冊中心,config是服務配置中心,redis做為緩存服務,gateway是后端網關。目前只設計了一套節點,考慮系統高並發高可用性后續可部署多套節點,Nginx做負載均衡以及增加熔斷、失敗重試等。系統流程為:客戶端請求經Nginx轉發到后端網關,網關直接轉發到權限系統進行認證授權,統一在網關做鑒權,鑒權通過則轉發到對應微服務。

 

二、技術選型

  ① 用戶權限

  在傳統的單體應用中,很多項目用的是shiro,畢竟shiro功能強大又靈活。而在Spring Cloud微服務架構中,好像大家更喜歡用Spring Security,所以了解了一下這兩個框架的區別,大致如下:

  1. Shiro比Spring更容易使用、實現和理解。
  2. Spring Security更加知名是因為品牌名稱。
  3. 很多人發現Spring Security使用比較麻煩。
  4. Spring Security有更好的社區支持。
  5. Apache Shiro在Spring Security處理密碼學方面有一個額外的模塊。
  6. Spring Security 對Spring 結合較好,並且不能脫離Spring,如果項目用的SpringMVC ,使用起來很方便。
  7. Shiro 功能強大、且 簡單、靈活。是Apache 下的項目比較可靠,且不跟任何的框架或者容器綁定,可以獨立運行。
  8. Spring Security支持Oauth、OpenID
  9. Spring Security的權限細粒度更高(關於這點,從我翻閱到的博客來看,大家一致表示還未發現高在哪里)

  從以上幾點來看,各有優劣,根據具體項目需求進行選擇。綜合多種原因,我們選用了Spring Security。

  ② 用戶認證

  傳統的單體應用都是通過session來做用戶認證,在前后端分離后偏向基於token認證。在微服務流行后,Spring Security 結合 OAuth 被推行。關於OAuth可以看看這篇文字 - 理解OAuth 2.0

  OAuth2分為認證服務器和資源服務器:在這個架構中,Auth Server作為認證服務器,負責對客戶端進行認證授權,為客戶端頒發令牌。Gateway作為資源服務器,負責對token進行驗證來判斷是否允許客戶端的訪問操作。

  OAuth2包含4種授權模式:

  • 授權碼(認證碼)模式 (Authorization code)
  • 簡化(隱形)模式 (Impilict
  • 密碼模式 (Resource Owner Password Credential)
  • 客戶端模式 (Client Credential)

  根據項目業務情況,我們這里目前采用密碼模式,隨着項目運作模式的改變、版本的大更新,后面不排除會使用其他授權模式。

  ③ JWT認證協議

  JWT(JSON Web Token)是一種認證協議,是目前最流行的跨域身份驗證解決方案。它將用戶信息加密到token里並由客戶端存儲,服務器不保存任何用戶信息。服務器通過使用保存的密鑰驗證token的正確性,只要正確即通過驗證。

  JWT優點是可以解決Session共享問題,提高后端服務的可用性和擴展性;缺點是無法作廢已頒發的令牌,雖然可以通過其他途徑實現,但是不免有些麻煩,而且違背了JWT的初衷。結合我們的項目來看,我認為使用JWT的弊是大於利的,所以這里我不打算使用JWT,延續以往的實現方式,在Redis中維護token。

三、系統工作流

  簡單畫了下訪問系統時系統的工作流:

 

  系統架構的設計相對簡單,后續可能還要經過討論進行調整。架構需要達到業務需求並且具備高並發、高可用、可擴展性,不能因為項目的變更或者用戶體量上升等等原因出現不可擴展、重構、大調整等問題。


免責聲明!

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



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