本系列文之後也會置於個人網站
之前已經看到我一些使用scope的地方:
接著要來看看是打哪來?在哪設定的?
首先在Realm的Configure下有一個Client Scopes。其中有定義我們已經使用過的profile
、email
、role
。另外可以注意到使用到Protocol都是openid-connect
,但本系列也不會提到另外一個--saml
,所以差異上基本不必理會。
上面定義好的Client Scopes
後,不代表Client就可以使用了。
還需要在Client的Client Scopes頁籤設定可以使用的Scope。預設上會有一些,也就是其實Keycloak在收到不包含scope請求後,也同樣會送出的部分。剩下的就是可以選擇的部分。
在未建立好新的Client Scope前,先使用OAuth.Tools看看會發生什麼事情:
當我們要求x
這個scope,卻會得到一個錯誤表示不被允許。
x
接著可以很簡單的建立一個名爲x
的Client Scope。
但此時,在進行一次要求,仍然會得到相同錯誤。
oauth_tools
client使用x
scope需要將client scope -- x
添加到oauth_tools下可以使用的scope(Optional Client Scopes)。
這次就可以成功取回存取權杖。還可以在存取權杖分析內的scope
看到x
。
最後是Claim的概念。這個與JWT格式的Token有關,本系列之後還會再提到JWT,現在就不再多做展開。
前面說過OAuth並沒有定義Token需要使用的格式,但是資源伺服器在做存取控制時,必須理解Token,那勢必需要一種解釋Token的辦法。而claims是在JWT這種Token格式下,建議解析後的每一個欄位,像是iss
、sub
、exp
,以及scope
、email
、website
、name
等等都是一個個聲明(claims)。
此外,Keycloak還有一處使用到了Scope這個字,但作用上與上面有些不同。用於資源(resource)上,與授權(Authorization)和存取控制(Access Token)相關。
在之後,會將資源
+操作
視爲一個permission。像是針對某個檔案(資源),可以進行寫入(操作)。也就組成一個權限(permission)--file:write
。這樣的設計並不是唯一,也可能是反過來的。可以看看另一套系統的權限設計:Alerta的權限是read:alerts
和write:alerts
。最終仍會回到資源伺服器如何解釋。
同樣地,這部分在之後還會有相關內容,還請期待。