您好,登錄后才能下訂單哦!
本篇內容主要講解“如何理解權限系統的基本概念和架構”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“如何理解權限系統的基本概念和架構”吧!
在授權流程中主要有三個部分,分別是資源管理,權限和策略管理,策略的執行。
先看下資源管理:
首先我們需要創建一個資源服務器,然后在資源服務器中創建各種資源,最后對各種資源設置一些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來執行策略的評估工作。
除此之外,作為一個認證服務器,我們還需要對外提供認證服務,那么最好的辦法就是提供OAuth3或者OpenID Connect的token服務。
另外我們還需要一個Protection API,用于resource server和權限管理服務進行交互。
到此,相信大家對“如何理解權限系統的基本概念和架構”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。