[keycloak-dev] fine-grain admin permissions with Authz

Bill Burke bburke at redhat.com
Mon Mar 13 13:10:07 EDT 2017



On 3/13/17 11:49 AM, Pedro Igor Silva wrote:
>
> On Mon, Mar 13, 2017 at 12:15 PM, Bill Burke <bburke at redhat.com 
> <mailto:bburke at redhat.com>> wrote:
>
>
>
>     On 3/13/17 9:43 AM, Pedro Igor Silva wrote:
>>
>>     Are you already implementing things ? Do you want me to look at
>>     these changes or work together with you on them ?
>>
>>     (As you may have noticed, there is an API that we use internally
>>     to actually evaluate policies given a set of permissions.)
>     Haven't implemented anything just researching how it could be
>     done.  The biggest issue right now that I'm having is that I don't
>     understand how to do things programatically yet (i.e. set up
>     resources, set up scopes, set up permissions, set up policies).  I
>     don't understand how the UI translates to the JPA entity model and
>     there seems to be a lot of set up data hidden by generic Map
>     objects.  Its also really confusing how the admin REST interface
>     translates from the UI to the model.    Its also really bizarre to
>     me that the things represented in the Admin Console UI are not
>     represented in the data model.  i.e. I have no idea how a
>     "Scoped-Permission" in the admin console maps to a JSON
>     representation, the REST API, nor how that JSON representation is
>     mapped to the model.
>
>
> The usage of Map objects is similar to what we have with identity 
> brokering. We need to be flexible in order to support different types 
> of policies without requiring changes to model.
>

> Regarding representation, both permission and policy are represented 
> as policies. What differs a permission from a policy is the type. 
> Policies defined as "scope" or "resource" (as you have in UI) are the 
> ones you can use to actually create permissions to resources and scopes.
>
This is the really confusing part.  There is no documentation on how to 
set up a Scoped or Resource permission through the REST API.  The 
AuthzClient only allows you to create resources AFAICT.  I'm currently 
tracing through admin-console permission UI to find which REST endpoint 
to use, and how that REST endpoint converts JSON into actual API calls.

> Everything you need is available from an AuthorizationProvider 
> instance, which can be obtained as follows:
>
> KeycloakSession.getProvider(AuthorizationProvider.class);
>
> From an instance of that class you can access methods to evaluate 
> permissions or obtain references to the different storages we use to 
> actually manage resources, policies, scopes and resource servers. I 
> can include the AuthZ API as a topic to our meeting about authz 
> services next week.
>
I don't have everything I need as you overload concepts (permission and 
policy) and it doesn't make sense yet the magic that must be done to 
store these definitions.

> Regarding scope-based permissions and the use cases you pointed out, I 
> think we may have to change how we are handling typed resources. 
> Today, we know a resource is a general/typed resource because the 
> owner of the resource is the resource server itself, and resource 
> instances are usually owned by an user, someone different than the 
> resource server. Need to take a look on this one and see how it impact 
> the use cases you pointed out ...
I have no idea what you're talking about here.  Am I missing something 
fundamental here?  From the docs, examples, and the admin console UI, I 
thought Authz was about defining rules (policies) to determine if 
somebody is allowed to perform a specific action (scope) on a certain 
thing (resource).

Bill


More information about the keycloak-dev mailing list