iT邦幫忙

2021 iThome 鐵人賽

DAY 26
0
Software Development

用Keycloak學習身份驗證與授權系列 第 26

Day25 - 【概念篇】Keycloak使用基本概念 - 第一部分: Scopes & Claims

本系列文之後也會置於個人網站


這之前看到的scopes

之前已經看到我一些使用scope的地方:

接著要來看看是打哪來?在哪設定的?

Realm 下的 Client Scopes

首先在Realm的Configure下有一個Client Scopes。其中有定義我們已經使用過的profileemailrole。另外可以注意到使用到Protocol都是openid-connect,但本系列也不會提到另外一個--saml,所以差異上基本不必理會。

Client 下的 Client Scopes

上面定義好的Client Scopes後,不代表Client就可以使用了。
還需要在Client的Client Scopes頁籤設定可以使用的Scope。預設上會有一些,也就是其實Keycloak在收到不包含scope請求後,也同樣會送出的部分。剩下的就是可以選擇的部分。

透過OAuth.Tools做一點示範說明

在未建立好新的Client Scope前,先使用OAuth.Tools看看會發生什麼事情:

當我們要求x這個scope,卻會得到一個錯誤表示不被允許。

建立client scope -- x

接著可以很簡單的建立一個名爲x的Client Scope。


但此時,在進行一次要求,仍然會得到相同錯誤。

允許oauth_tools client使用x scope

需要將client scope -- x添加到oauth_tools下可以使用的scope(Optional Client Scopes)。

這次就可以成功取回存取權杖。還可以在存取權杖分析內的scope看到x

Claim

最後是Claim的概念。這個與JWT格式的Token有關,本系列之後還會再提到JWT,現在就不再多做展開。

前面說過OAuth並沒有定義Token需要使用的格式,但是資源伺服器在做存取控制時,必須理解Token,那勢必需要一種解釋Token的辦法。而claims是在JWT這種Token格式下,建議解析後的每一個欄位,像是isssubexp,以及scopeemailwebsitename等等都是一個個聲明(claims)。

Authorization Scopes

此外,Keycloak還有一處使用到了Scope這個字,但作用上與上面有些不同。用於資源(resource)上,與授權(Authorization)和存取控制(Access Token)相關。

在之後,會將資源+操作視爲一個permission。像是針對某個檔案(資源),可以進行寫入(操作)。也就組成一個權限(permission)--file:write。這樣的設計並不是唯一,也可能是反過來的。可以看看另一套系統的權限設計:Alerta的權限是read:alertswrite:alerts。最終仍會回到資源伺服器如何解釋。

同樣地,這部分在之後還會有相關內容,還請期待。


上一篇
Day24 - 【概念篇】Keycloak使用基本概念 - 第一部分: Client
下一篇
Day26 - 【概念篇】Keycloak使用基本概念 - 第二部分: User & Group
系列文
用Keycloak學習身份驗證與授權40

尚未有邦友留言

立即登入留言