單點登陸與權限管理本質:權限管理介紹

前面幾篇文章介紹了單點登陸的本質,包括cookie、session、重定向的基本概念,單點登陸的基本交互流程,cookie的重要性和安全問題。單點登陸可以確保:必須經過身份驗證後,才能訪問網站,且訪問多個系統時,只須要登陸一次。html

該系列的完整寫做計劃,可見:系列概述前端

系列第一部分索引:redis

  1. session和cookie介紹
  2. HTTP重定向
  3. 單點登陸介紹
  4. cookie安全問題
  5. 權限管理介紹

通常系統都會有多個角色,不一樣角色可訪問的系統功能不一樣,經過給用戶分配不一樣角色,決定用戶可訪問的系統功能。apache

繼續介紹「單點登陸與權限管理」系列的第一部分:單點登陸與權限管理本質,本篇說說權限管理,主要從如下幾個方面介紹:後端

  • 權限管理的通常模型
  • 權限驗證範圍
  • Shiro基本架構和擴展點
  • 系列第一部分總結

權限管理的通常模型

權限驗證的過程比較簡單,描述以下:緩存

  1. 用戶登陸成功後,會將本身的我的信息和權限信息,保存到session中,能夠存儲在內存、redis中;
  2. 用戶訪問其餘頁面時,會根據訪問路徑,與用戶權限數據進行匹配,驗證是否有權限訪問;
  3. 若是有權限,顯示訪問頁面,若是無權限,提示用戶無權訪問;

權限驗證基本流程

如何管理和分配用戶權限呢,通常會抽象出以下實體概念:安全

  1. 用戶:訪問系統的主體;
  2. 角色:分配權限的最小單元,經過角色給用戶分配權限;
  3. 權限菜單:權限的最小單元,一個角色配置多個權限菜單;

權限管理實體

另外,爲了方便權限管理,會單獨抽取一個服務「用戶中心」,統一管理用戶、角色和各個系統的權限菜單。權限菜單由各個子系統同步到「用戶中心」或者提供批量導入的功能,權限菜單標識的規則要提早約定好,一致的菜單標識有助於權限攔截的判斷。cookie

簡單截取幾個咱們項目中的頁面,加深下理解:session

  1. 添加用戶時,須要選擇角色 架構

  2. 添加角色時,須要選擇權限菜單

  3. 權限菜單由各個子系統同步過來

權限驗證範圍

用戶擁有了訪問和操做某些數據的權限,但不表明能夠訪問全部的數據,可能只能訪問和操做本身的數據,可能只能訪問和操做組內的數據,這是更細粒度的權限控制。

權限驗證的位置可能在前端、可能在後端。前端根據當前用戶的權限,顯示不一樣的菜單項、操做按鈕,後端根據當前用戶的權限,驗證操做的合法性,返回可訪問的數據集合,權限驗證位置也要考慮全面。

控制粒度

好比有這樣一個場景:有一個查詢訂單接口供外部調用,可根據訂單編號返回訂單詳情。

若是訂單編號有規則可尋,且後端不對訂單所屬人進行判斷,就能夠查看其餘人訂單的信息,因此,須要更細粒度的判斷,驗證訂單的所屬人。

另外能夠經過角色、菜單權限2個粒度進行權限驗證:

<shiro:hasPermission name="permission1">
    <h2>擁有permission1權限能夠看到這裏</h2>
</shiro:hasPermission>
<shiro:hasRole name="role">
    <h2>擁有role角色能夠看到這裏</h2>
</shiro:hasRole>
複製代碼
驗證位置

爲了讓用戶體驗足夠好,用戶沒法操做的菜單項和操做按鈕不須要再顯示了,須要在前端進行驗證,好比添加用戶的操做:

<shiro:hasPermission name="user:add">
    <a href='user/add'>添加用戶</a>
</shiro:hasPermission>
複製代碼

只有前端驗證也不行,能夠經過模擬HTTP請求繞過前端訪問,後端也要進行驗證,shiro提供了攔截器進行統一處理。

Shiro基本架構和擴展

Shiro是apache下的開源軟件,一個的安全框架,對用戶的身份和權限進行管理和驗證,看看官網對它的概述:

Apache Shiro™ is a powerful and easy-to-use Java security framework that performs authentication, authorization, cryptography, and session management

本篇不會介紹Shiro的細節,只是經過介紹Shiro的基本組件,對應到權限管理的通常模型。

Shiro的基本架構以下:

  1. Subject:當前與用戶交互的實體,包括用戶、第三方服務、corn任務等,使用者只需經過該對象提供的一系列方法,統一與後端的安全管理模塊交互, 對應模型中的「用戶」;
  2. Authenticator:負責驗證用戶身份,用戶嘗試登錄時,會調用它的方法進行認證,它會根據配置,調用一個或多個Realm進行用戶名和密碼校驗,對應模型中的「用戶登錄操做」;
  3. Authorizer:負責驗證用戶訪問權限,用戶訪問一個頁面時,能夠根據它提供的方法驗證用戶的權限,它也會調用一個或多個Realm獲取用戶的權限數據,對應模型中的「是否有權限訪問」;
  4. SessionManager:提供一種健壯的方式管理用戶會話,這是Shiro的一個獨特特性,若是是一個Web/Servlet應用,默認會使用已有的會話管理,若是不是Web應用,Shiro會使用內置的會話管理器。它會調用SessionDAO進行會話持久化,對應模型中的「Session管理」;
  5. CacheManager:Shiro在Authenticator、Authorizer、SessionManager模塊,會訪問後端的存儲系統,使用緩存管理能夠提升數據訪問的性能,能夠很方便的與第三方緩存框架集成,好比Ehcache,Redis等;
  6. Realms:是程序和用戶數據、權限數據的橋樑,以插件的方式提供擴展,能夠配置一個或多個Realm爲Authenticator和Authorizer模塊提供數據支持;
  7. Cryptography:提供數據加解密的支持,它封裝了相關接口,更易理解和使用;

Shiro基本架構

經過上面的介紹能夠看出,Shiro的基本組件與總結的「通常模型」是對應的,它幫助咱們實現了整個用戶驗證、權限驗證、會話管理的流程,同時提供緩存管理、加解密封裝提升了性能和安全性,經過Realm插件的方式支持擴展,自定義實現類獲取用戶、權限數據。

以用戶身份認證爲例,說明幾個組件的交互過程:

基本交互過程

系列第一部分總結

到此,系列第一部分「單點登陸與權限管理本質」就介紹完了,經過5篇文章,把本身想說的本質說完了,基礎概念確定會有遺漏,後續部分學習、總結過程當中,會不斷補充。

還原技術的本質,把複雜的技術、框架抽象來看,造成一個相對簡單、容易理解的視圖,可以更好的理解、擴展、應用它。

對於單點登陸,經過cookie、http重定向,可自動進行跳轉和身份驗證,達到登陸一次,可訪問多個子系統的效果。

對於權限管理,瞭解其通常的模型和驗證流程,加上成熟的實現框架,能夠快速、全面、穩定地實現它,並在此基礎上進行擴展。

另外,cookie、用戶的帳號權限信息很重要,要不斷積累安全方面的知識,提升其安全性。

接下來的第二部分主要是實踐,會仿照咱們的系統作一個DEMO,利用CAS、Shiro框架實現單點登陸和權限管理。另外,會抽象出一個「用戶中心」,管理用戶、角色、權限菜單,各個子系統經過同步方式同步本身的權限菜單。

系列索引:

  1. session和cookie介紹
  2. HTTP重定向
  3. 單點登陸介紹
  4. cookie安全問題
  5. 權限管理介紹

情情說
相關文章
相關標籤/搜索