當前位置:
首頁 > 最新 > 單點登錄與許可權管理本質:許可權管理介紹

單點登錄與許可權管理本質:許可權管理介紹

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

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

繼續介紹「單點登錄與許可權管理」系列的第一部分:單點登錄與許可權管理本質,本篇說說許可權管理,主要從以下幾個方面介紹:

許可權管理的一般模型

許可權驗證範圍

Shiro基本架構和擴展

系列第一部分總結

許可權管理的一般模型

許可權驗證的過程比較簡單,描述如下:

用戶登錄成功後,會將自己的個人信息和許可權信息,保存到session中,可以存儲在內存、redis中;

用戶訪問其他頁面時,會根據訪問路徑,與用戶許可權數據進行匹配,驗證是否有許可權訪問;

如果有許可權,顯示訪問頁面,如果無許可權,提示用戶無權訪問;

如何管理和分配用戶許可權呢,一般會抽象出如下實體概念:

用戶:訪問系統的主體;

角色:分配許可權的最小單元,通過角色給用戶分配許可權;

許可權菜單:許可權的最小單元,一個角色配置多個許可權菜單;

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

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

添加用戶時,需要選擇角色

添加角色時,需要選擇許可權菜單

許可權菜單由各個子系統同步過來

許可權驗證範圍

用戶擁有了訪問和操作某些數據的許可權,但不代表可以訪問所有的數據,可能只能訪問和操作自己的數據,可能只能訪問和操作組內的數據,這是更細粒度的許可權控制。

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

控制粒度

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

如果訂單編號有規則可尋,且後端不對訂單所屬人進行判斷,就可以查看其他人訂單的信息,所以,需要更細粒度的判斷,驗證訂單的所屬人。

另外可以通過角色、菜單許可權2個粒度進行許可權驗證:

驗證位置

為了讓用戶體驗足夠好,用戶無法操作的菜單項和操作按鈕不需要再顯示了,需要在前端進行驗證,比如添加用戶的操作:

只有前端驗證也不行,可以通過模擬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的基本架構如下:

Subject:當前與用戶交互的實體,包括用戶、第三方服務、corn任務等,使用者只需通過該對象提供的一系列方法,統一與後端的安全管理模塊交互, 對應模型中的「用戶」;

Authenticator:負責驗證用戶身份,用戶嘗試登陸時,會調用它的方法進行認證,它會根據配置,調用一個或多個Realm進行用戶名和密碼校驗,對應模型中的「用戶登陸操作」;

Authorizer:負責驗證用戶訪問許可權,用戶訪問一個頁面時,可以根據它提供的方法驗證用戶的許可權,它也會調用一個或多個Realm獲取用戶的許可權數據,對應模型中的「是否有許可權訪問」;

SessionManager:提供一種健壯的方式管理用戶會話,這是Shiro的一個獨特特性,如果是一個Web/Servlet應用,默認會使用已有的會話管理,如果不是Web應用,Shiro會使用內置的會話管理器。它會調用SessionDAO進行會話持久化,對應模型中的「Session管理」;

CacheManager:Shiro在Authenticator、Authorizer、SessionManager模塊,會訪問後端的存儲系統,使用緩存管理可以提高數據訪問的性能,可以很方便的與第三方緩存框架集成,比如Ehcache,Redis等;

Realms:是程序和用戶數據、許可權數據的橋樑,以插件的方式提供擴展,可以配置一個或多個Realm為Authenticator和Authorizer模塊提供數據支持;

Cryptography:提供數據加解密的支持,它封裝了相關介面,更易理解和使用;

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

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

系列第一部分總結

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

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

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

對於許可權管理,了解其一般的模型和驗證流程,加上成熟的實現框架,可以快速、全面、穩定地實現它,並在此基礎上進行擴展。

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

接下來的第二部分主要是實踐,會仿照我們的系統做一個DEMO,利用CAS、Shiro框架實現單點登錄和許可權管理。另外,會抽象出一個「用戶中心」,管理用戶、角色、許可權菜單,各個子系統通過同步方式同步自己的許可權菜單。

還原技術的本質

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 情情說 的精彩文章:

TAG:情情說 |