Shiro的統一認證受權

Shiro的統一認證受權git

Shiro是Apache下面的一個簡單,易用的Java權限框架,對於單體應用來說,Shiro徹底可以極好的,快速的知足權限的需求,因此通常在作項目的時候,Shiro都會成爲開發者的首選。github

但是,若是你須要作第二個,第三個,第n個應用,一樣須要相同的認證、受權時,可能就須要對Shiro進行必定的擴展或者是集成其它框架,才能很好的知足你的需求了。框架

Shiro是如何進行認證受權maven

Shiro自己並無幫你實現認證、受權,但Shiro很好的定義了權限相關的一些概念,讓你完成具體的實現學習

  • 認證
    在Shiro裏,完成認證通常是這樣的subject.login(token),Subject表明一個用戶,Token表明一個用戶請求受權時提交的受權信息,經過AuthenticatingRealm.doGetAuthenticationInfo()獲取到當前Subject的一些信息,好比Principals,Credentials,校驗提交的token,若是登陸成功,保存當前登陸用戶
  • 受權
    在Shiro裏,權限控制通常是這樣的@RequiresPermissions,當用戶訪問受保護資源的時候,Shiro會經過AuthorizingRealm.doGetAuthorizationInfo(),從當前認證經過Subject的Principals裏獲取用戶的權限,判斷用戶是否能訪問該資源

在Shiro裏,經過實現Realm來完成上面2件事情,當你時單體應用的時候,很是簡單就能完成應用的認證受權。ui

可是當你有多個應用,須要複用同一套用戶以及權限信息時該怎麼作呢,能夠複用Realm,用戶權限在同一個db中,這樣的話是能夠實現的,可是耦合過高,不一樣的應用必需要接入同一個數據源才行;或者能夠把用戶權限相關的DAO剝離出來,做爲RPC或Rest調用,也能夠實現;可是更好的方式是把認證受權整個剝離出來,單獨做爲認證受權服務spa

基於Shiro的統一認證受權code

爲了實現統一認證受權,Shiro有CasFilter,能夠集成CAS,可是CAS又是另一套框架,較爲重,有單獨的學習成本,因此這裏介紹一種更簡單,輕量,易用的,基於Shiro的認證受權服務shiro-uaaserver

認證受權流程blog

  1. 用戶請求受保護資源Resource Server
  2. Resource Server判斷用戶是否已經登陸
  3. 若是沒有登陸,Resource Server引導用戶到UAA Server進行登陸
  4. 用戶在UAA Server登陸,若是登陸成功,UAA Server返回code給用戶,並引導用戶到以前訪問的Resource Server
  5. Resource Server用code到UAA Server獲取access-token,token包含用戶受權信息
  6. Resource Server驗證accessToken是否合法,若是合法,在Resource Server保存用戶信息

以下圖:

map

使用

  • auth-server

    1. 引用maven
    2. 實現本身的登陸
  • resource-server

    1. 引用maven
    2. 和shiro同樣,使用相關注解進行權限控制

基本上開箱即用,目前auth-server只是做爲jar包提供,須要本身實現登陸邏輯,後續會有可部署服務

shiro-uaa具體的相關說明介紹能夠查看項目地址

相關文章
相關標籤/搜索