權(quán)限架構(gòu)
主體采用RBAC(Role-Base Access Control,基于角色的訪問控制)模型,就是用戶通過角色和權(quán)限進行關(guān)聯(lián)實現(xiàn),多對多的用戶角色關(guān)系模式。
要由用戶管理、角色管理、菜單管理幾部分組成,角色權(quán)限管理包括功能菜單權(quán)限、操作權(quán)限,數(shù)據(jù)權(quán)限控制,權(quán)限主要由功能權(quán)限(界面權(quán)限、菜單權(quán)限、操作權(quán)限)和數(shù)據(jù)權(quán)限構(gòu)成。
技術(shù)架構(gòu)
系統(tǒng)整體采用微服務(wù)架構(gòu),安全模塊采用OAuth2開放式授權(quán)標(biāo)準(zhǔn),Token令牌采用JWT標(biāo)準(zhǔn)實現(xiàn),技術(shù)框架采用SpringCloud+SpringGateway+SpringSecurity+自定義權(quán)限表達(dá)式。
(Open Authorization,開放授權(quán))是為用戶資源的授權(quán)定義了一個安全、開放及簡單的標(biāo)準(zhǔn),第三方無需知道用戶的賬號及密碼,就可獲取到用戶的授權(quán)信息。
Json web token (JWT), 是為了在網(wǎng)絡(luò)應(yīng)用環(huán)境間傳遞聲明而執(zhí)行的一種基于JSON的開放標(biāo)準(zhǔn)((RFC 7519).該token被設(shè)計為緊湊且安全的,特別適用于分布式站點的單點登錄(SSO)場景。
JWT的聲明一般被用來在身份提供者和服務(wù)提供者間傳遞被認(rèn)證的用戶身份信息,以便于從資源服務(wù)器獲取資源,也可以增加一些額外的其它業(yè)務(wù)邏輯所必須的聲明信息,該token也可直接被用于認(rèn)證,也可被加密。
權(quán)限配置
密鑰配置
系統(tǒng)遵循OAuth2開放式授權(quán)標(biāo)準(zhǔn)協(xié)議,Token令牌采用RSA非對稱加密算法加密,系統(tǒng)用戶密碼采用MD5加密。
權(quán)限表達(dá)式配置
鑒權(quán)(authentication)是指驗證用戶是否擁有訪問系統(tǒng)的權(quán)利,鑒權(quán)配置即配置哪些資源需要什么權(quán)限才能訪問,配置資源與權(quán)限之間的關(guān)系。
權(quán)限配置文件位于resources/security.yml
在介紹權(quán)限表達(dá)式配置之前需要先了解下權(quán)限表達(dá)式、URL路徑、權(quán)限謂詞3個概念, 權(quán)限表達(dá)式描述資源權(quán)限的邏輯關(guān)系,包括請求方式、URL路徑、權(quán)限謂詞3個部分, 請求方式即HTTP請求方法,如:GET、POST、PUT、DELETE等,URL路徑即需要鑒權(quán)的URL路徑地址,支持多種通配符匹配,權(quán)限謂詞用于描述或判定權(quán)限性質(zhì)、特征或權(quán)限之間關(guān)系的表達(dá)式。
格式語法
目前支持兩種類型的權(quán)限表達(dá)語法,分別功能權(quán)限表達(dá)式、數(shù)據(jù)權(quán)限表達(dá)式。
功能權(quán)限表達(dá)式
HTTP請求方法 URL路徑=權(quán)限謂詞表達(dá)式
紅色部分:HTTP請求方法,例如GET、POST、PUT、DELETE等
黃色部分:空格占位符
綠色部分:URL表達(dá)式,支持多種通配符。例如:/app/*/users,app/**
橙色部分:等于號占位符,描述左側(cè)匹配資源需要右側(cè)權(quán)限。
藍(lán)色部分:權(quán)限謂詞,例如:(view&&export)||edit表示需要查看與導(dǎo)出權(quán)限,或者編輯權(quán)限。
數(shù)據(jù)權(quán)限表達(dá)式
HTTP請求方法 URL路徑參數(shù)=權(quán)限謂詞表達(dá)式參數(shù)
淺綠色部分:參數(shù)占位符,數(shù)據(jù)定位參數(shù)顧名思義用于唯一標(biāo)識行級數(shù)據(jù)的參數(shù),支持多參數(shù)標(biāo)識,支持批量行數(shù)據(jù)定位鑒權(quán)。
URL路徑表達(dá)式
URL路徑表達(dá)式,用于配置需要進行鑒權(quán)的資源路徑地址。路徑有三種通配符匹配方法,這些可以組合出很多種靈活的路徑模式
示例:
權(quán)限謂詞
支持與或非邏輯運算: 例如: a&&b, a||b, (a&&b)||(c&&d), a&&b||c, !a, !(a&&b),例如:view&&export)||edit表示校驗是否擁有查看和導(dǎo)出的權(quán)限,或者編輯權(quán)限。
參數(shù)
數(shù)據(jù)權(quán)限控制需要唯一標(biāo)識行數(shù)據(jù),用于驗證用戶是否有該數(shù)據(jù)的操作權(quán)限,參數(shù)占位符為數(shù)據(jù)定位器的參數(shù)名,支持單參數(shù)、復(fù)合參數(shù),單條數(shù)據(jù)定位鑒權(quán)({參數(shù)名}大括號),批量數(shù)據(jù)定位鑒權(quán)([參數(shù)名]中括號)。例如單參數(shù)userId用戶編號,productId產(chǎn)品編號,復(fù)合參數(shù)type類型、productId產(chǎn)品編碼,批量數(shù)據(jù)權(quán)限鑒權(quán)userIds用戶編碼集,需要指出的是每個表達(dá)式運算的數(shù)據(jù)對象是每一條數(shù)據(jù)。
示例:
一個參數(shù)時權(quán)限項表達(dá)式參數(shù)默認(rèn)可以不配置/user/{id}=view&&eidt等于/user/{id}=view{id}&&eidt{id} 路徑參數(shù)
實體參數(shù)
復(fù)合參數(shù)
元素配置
權(quán)限配置由permit-paths白名單、jwt-users來賓用戶、resource資源權(quán)限3部分元素組成,其中resource元素包括authrities、data-authrities兩部分元素。
permit-paths白名單
無需進行權(quán)限過濾的請求路徑,當(dāng)系統(tǒng)有些資源不需要進行權(quán)限過濾的時候配置該元素,配置語法如下圖所示,路徑表達(dá)式配置。
Resource資源權(quán)限
資源權(quán)限配置元素為權(quán)限模塊的核心元素,包括authrities功能權(quán)限、data-authrities數(shù)據(jù)權(quán)限,兩者的區(qū)別在于功能權(quán)限為URL匹配路徑的權(quán)限控制,數(shù)據(jù)權(quán)限在URL匹配路徑的基礎(chǔ)上增加了數(shù)據(jù)鑒權(quán)控制。
Authrities功能權(quán)限
功能權(quán)限控制,通常表示界面業(yè)務(wù)功能接口權(quán)限的控制,例如:用戶列表數(shù)據(jù)獲取接口,用戶信息添加、刪除、更新等等接口的權(quán)限控制。
data-authrities數(shù)據(jù)權(quán)限
數(shù)據(jù)權(quán)限控制,為更細(xì)粒度的權(quán)限控制,是對業(yè)務(wù)行級數(shù)據(jù)的操作權(quán)限進行控制,例如用戶只能查看、操作自己創(chuàng)建的數(shù)據(jù),管理員可以賦權(quán)給指定的用戶或角色查看、操作某些某條數(shù)據(jù)。
微前端
微前端架構(gòu)是一種類似于微服務(wù)的可插拔式架構(gòu),它將微服務(wù)的理念應(yīng)用于瀏覽器端,即將 Web 應(yīng)用由單一單體應(yīng)用變?yōu)槎鄠€小型可獨立運行、獨立開發(fā)、獨立部署的應(yīng)用。
前端頁面通過微前端加載器,利用頁面路由和動態(tài)加載等技術(shù),實現(xiàn)前端集成主頁面與微前端的“拼圖式”開發(fā)。前端集成項目團隊只需關(guān)注前端整體風(fēng)格、微前端之間的數(shù)據(jù)交互和頁面路由等內(nèi)容,不涉及前端與后端之間以及后端與后端之間的 API 集成,從而降低集成過程中的技術(shù)敏感度、團隊溝通成本和集成復(fù)雜度,提高交付效率和用戶體驗。
外部系統(tǒng)前端應(yīng)用部署集成,各系統(tǒng)前端應(yīng)用組件獨立打包部署,通過配置部署、動態(tài)加載應(yīng)用、統(tǒng)一生命周期管理。
總結(jié)
基于權(quán)限表達(dá)式實現(xiàn)的系統(tǒng)可輕松集成被集成,業(yè)務(wù)系統(tǒng)作為子系統(tǒng)存在,安全權(quán)限管理由宿主統(tǒng)統(tǒng)一處理,將復(fù)雜且耦合性高的權(quán)限控制從業(yè)務(wù)服務(wù)中剝離,業(yè)務(wù)子系統(tǒng)只需關(guān)注業(yè)務(wù)邏輯處理,真正做到無縫集成,降低了系統(tǒng)集成的難度與復(fù)雜性,提升了系統(tǒng)的整體性能和可維護性。
系統(tǒng)權(quán)限模塊只是實現(xiàn)了基本的權(quán)限控制需求,還存在許多需要完善的地方,例如前端頁面功能按鈕的權(quán)限控制、大數(shù)據(jù)量的權(quán)限數(shù)據(jù)維護繁瑣,需要一條條添加維護好菜單、功能權(quán)限、操作權(quán)限數(shù)據(jù),手動配置鑒權(quán)數(shù)據(jù)極易出錯等等?;蛟S將來有需要可以優(yōu)化的地方。
自動識別功能權(quán)限數(shù)據(jù)
集成新的業(yè)務(wù)服務(wù)維護功能權(quán)限數(shù)據(jù)需要對業(yè)務(wù)服務(wù)接口全面了解,需要一條條維護好功能接口,URL地址、權(quán)限標(biāo)識符極易存在拼寫錯誤,或許可以通過一定的場景自動掃描獲取注冊服務(wù)所有公開的資源接口,管理員可以在系統(tǒng)里通過界面自動查看、搜索資源接口動態(tài)可選擇地導(dǎo)入接口數(shù)據(jù)(功能權(quán)限數(shù)據(jù))。
自動初始化操作權(quán)限
一般功能操作為增、刪、改、查,可以在添加菜單數(shù)據(jù)后自動初始化操作功能,用戶也可以單獨添加修改操作功能數(shù)據(jù)。
基礎(chǔ)數(shù)據(jù)權(quán)限可配置
根據(jù)需要可以通過界面,選擇需要進行數(shù)據(jù)權(quán)限控制的業(yè)務(wù)模塊,自動導(dǎo)入數(shù)據(jù)權(quán)限控制基礎(chǔ)數(shù)據(jù)。
自助式鑒權(quán)配置
用戶可以通過可視化界面簡單操作配置白名單、來賓用戶權(quán)限、資源權(quán)限等數(shù)據(jù),支持鑒權(quán)配置數(shù)據(jù)導(dǎo)入導(dǎo)出等,例如:自動列出所有功能接口通過搜索、勾選等方式選擇需要鑒權(quán)的資源,引導(dǎo)式配置權(quán)限謂詞表達(dá)式等。
審核編輯:劉清
-
URL
+關(guān)注
關(guān)注
0文章
139瀏覽量
15340 -
RSA
+關(guān)注
關(guān)注
0文章
59瀏覽量
18892 -
RBAC
+關(guān)注
關(guān)注
0文章
44瀏覽量
9969 -
HTTP協(xié)議
+關(guān)注
關(guān)注
0文章
61瀏覽量
9722
原文標(biāo)題:松耦合式的權(quán)限控制設(shè)計,自定義權(quán)限表達(dá)式y(tǒng)yds!
文章出處:【微信號:AndroidPush,微信公眾號:Android編程精選】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論