文章目錄
- 簡介
- 授權流程
- 權限系統的架構
簡介
權限系統是我們在系統設計和應用中一種非常常見的系統,一般來說權限系統的功能分為認證和授權兩種,認證就非常簡單的,驗證完用戶名密碼就算認證成功,而授權里面的套路就很多了,本文將會詳細講解權限系統中的一些基本概念和設計上面要注意的問題,希望大家能夠喜歡,
授權流程
在授權流程中主要有三個部分,分別是資源管理,權限和策略管理,策略的執行,
先看下資源管理:

首先我們需要創建一個資源服務器,然后在資源服務器中創建各種資源,最后對各種資源設定一些scope,scope就是跟資源相關的的一些可執行的操作,
什么是資源呢?資源可以是一個web頁面,一個RESTful資源,一個檔案等等,
舉個例子,假如我們有一個圖書館資源服務器,圖書館有一個本《人月神話》的書,那么這本書就被稱作資源,接下來我們需要為這個資源定義一些可操作性的scope,或者說策略,比如說只有本校的學生才能夠借閱這本書,
當我們定義好資源之后,就需要對這些資源進行一些權限和策略的設定,這就需要進行權限和策略管理,
看下權限和策略管理的流程:

首先是創建策略,然后定義權限,最后將權限和策略進行關聯,
策略就是定義的一些去訪問某些資源或者權限的操作,策略是和具體的權限是分離的,策略只制定了在什么情況下可以做(某些事情),或者在某些情況下不能做(某些事情),這些事情就是后面創建的權限,
比如說,擁有user角色可以做什么事情,就是一種策略,
策略定義好了,我們就可以創建權限了,權限很好理解,比如:借《人月神話》的書的權限,
我們把策略和權限組合起來就是:擁有user角色的,可以借《人月神話》這本書,
通用的策略有很多種,比如說基于屬性的訪問策略,基于角色的訪問策略,基于用戶的訪問策略,基于背景關系的訪問策略,基于時間的訪問策略,基于規則的訪問策略或者其他的自定義策略等,
通常來說,基于角色的訪問策略role-based access control (RBAC)是最常用的,
我們把用戶賦予相應的角色,然后在訪問資源的時候根據不同的角色策略來執行不同的permission操作,
雖然RBAC非常有用,用途也非常廣泛,但是它還是有下面的幾個缺點:
- 資源和角色是強系結的,如果我們對角色進行一些添加,洗掉和修改操作,將會影響到所有相關聯的資源,
- 對于角色的修改則可能需要我們對代碼進行修改,
- 如果你的應用程式非常大的話,使用RBAC可能會出現一些錯誤,
- RBAC的靈活性不夠強,不能夠做到更加細粒度的權限控制,
最后,我們看一下策略的執行,
策略的執行就是真正的在資源服務器上執行相應的授權作業,一般來說我們在資源服務器中有一個 Policy Enforcement Point (PEP)來和授權服務器進行互動,根據授權服務器回傳的授權資訊來執行相應的資源操作,
權限系統的架構
先看一張權限系統的基本架構圖:

其中有下面幾個關鍵組件:
-
PAP全稱是Policy Administration Point,它是一個權限管理的后臺頁面,我們需要這樣的一個后臺界面來配置和管理權限和資源,
-
PDP全稱是Policy Decision Point,它提供了一些決策策略,通過這些策略將授權請求發送到相應的位置,并根據請求的權限對策略進行相應的決策,
-
PEP全稱是Policy Enforcement Point,在不同的資源服務器中執行相應的策略,
-
PIP全稱是Policy Information Point,在判斷和決策策略的時候,可以從中獲取相應的屬性資訊,
上圖中,Storage就是資料的存盤和分類,這里我們主要存盤resouce,scope,permission和policy這4種物件,
resource代表的是要訪問的物件,可以是一個或者多個物件的集合,比如說:web程式中的頁面等等,資源是受保護的物件,需要為資源配置一些權限,
每個資源都有一個唯一的識別符號,可以代表一個資源或一組資源, 例如,你可以管理一個銀行帳戶資源,該資源代表并定義了所有銀行帳戶的一組授權策略, 但是,你也可以使用另一個名為Alice’s Banking Account的資源,該資源代表由單個客戶擁有的單個資源,該資源可以具有自己的一組授權策略,
我們看一個resource的例子:

上圖中,我們將不同的URI定義為resource,并給不同的resource起了唯一的名字,
Scope是對資源的一系列操作,比如你可以對資源進行讀,寫或者編輯,洗掉操作,這些都可以被稱之為scope,當然,你也可以指定resource中的某個屬性作為scope,
然后就是Permission,權限將受保護的物件與是否授予訪問權限的策略相關聯,
比如我們有下面一個權限:
X CAN DO Y ON RESOURCE Z
x表示的是一個或者多個用戶,角色或者groups,或者是他們的組合,
Y表示的是對資源的一種操作,
Z就是資源了,比如/index頁面,
我們可以創建基于resource的permission:

也可以創建基于scope的permission:

Policy定義了要授予物件訪問權限必須滿足的條件,Policy并沒有指明要保護的物件,只是指定了訪問給定物件必須滿足的條件,

比如上面的Policy,指定了什么樣的角色,針對什么樣的client,制定出來的什么樣的邏輯,
有了策略就需要一個Policy Provider,Policy Provider主要為我們提供特定策略型別的實作,
為了做好策略評估的作業,我們還需要一個策略評估引擎,通過這個engine來執行策略的評估作業,
除此之外,作為一個認證服務器,我們還需要對外提供認證服務,那么最好的辦法就是提供OAuth2或者OpenID Connect的token服務,
另外我們還需要一個Protection API,用于resource server和權限管理服務進行互動,
本文已收錄于 http://www.flydean.com/authorization-service/
最通俗的解讀,最深刻的干貨,最簡潔的教程,眾多你不知道的小技巧等你來發現!
歡迎關注我的公眾號:「程式那些事」,懂技術,更懂你!
CSDN認證博客專家
Java專家
全堆疊作業者
區塊鏈達人
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/238530.html
標籤:其他
上一篇:面試題----在什么地方可以用mq,或者為什么要使用mq
下一篇:作業3年,看啥資料能月薪30K?
