本系列文之後也會置於個人網站
在帳號系統下,除了帳號本身與帳號群組外,通常還存在一個非常重要的部分--角色(Role),更有基於角色的存取授權方式(RBAC)。
寫到有點累了,沒意外的話之後是會提到RBAC
帳號如果代表一個人,這個人可能有多個角色身份。可能是個老師、主任、校長;可能是爸媽、叔姨;可能是員工、部長、處長、老闆,且可能有一群人擁有同一種角色。角色和帳號群組有點像,但在Keycloak是兩個概念。除此之外,在Keycloak還分成兩類型角色-- Realm Roles 和 Client Roles 。
首先,你可以建立Realm共用的角色,像是員工、老闆等等較爲通用的角色。
點選在 Realm 選單下的 Roles ,然後再點選 Add Role :
然後設定 Role Name 爲 employee
, 接著按下儲存就大功告成。
不同應用可能需要不同的角色。已常見的內容管理系統(文章管理系統)來說,可能有以下角色:
不同情況可能需要不同角色,以最近在社群媒體有點討論度的喜劇表演來說,可能就分有 表演者 、 寫手 等幾角色。或是在同一家公司內,不同專案內,可能一個人在一個專案內是專案經理,但在另一個專案是專案成員。
要建立 Client Roles 也很簡單,先到 Client 相關設定頁面,找到 Roles 頁籤,點選 Add Role:
與建立 Realm Role 相同,先簡單建立一個Reader就好。
要使帳號擁有某個角色,只需要到帳號設定相關頁面,選擇「Role Mappings」頁籤。
在 Realm Roles 旁邊的 Available Roles 選取區塊內選擇 employee ,點選 Add selected 加入到 Assigned Roles。
要指定 Client Roles 也同樣。在 Client Roles 旁邊的 Available Roles 選取區塊內選擇 Reader ,點選 Add selected 加入到 Assigned Roles。
現在,在角色設定相關頁面的「User in Role」頁籤頁面,可以看到方才加入的帳號。
你同樣可以在帳號群組頁面做相似設定。當帳號加入特定帳號群組後就自動會擁有帳號群組設定的角色。現在可以一樣將employee
和Reader
指定給Group A
。
Bob 已經是 Group A 群組成員。回到Bob帳號相關設定頁面,將相關的角色移除(選擇相關角色後,點選「Remove selected」)。會發現生效的角色 (Effective Roles) 仍然存在指定給Group A的角色。
下一篇會來說一下JWT格式的Token,然後談談Open-Id。到時與OAuth相關彎概念議題也就全部結束。
會不會進到存取控制概念,還是直接進入實戰篇...容我在猶豫一下wwww
與帳號屬性(User Attribute)和群組屬性(Group Attribute)一樣,角色同樣可以設定角色屬性(Role Attribute)。設定方法類似,但目前沒有簡單的方式可以使用,所以也就先在這裏提提而已。