[keycloak-dev] Feedback
Marek Posolda
mposolda at redhat.com
Fri Jun 17 10:30:39 EDT 2016
I did not yet went deeply through all the details, however briefly went
through the docs and examples. Few things:
- Term "scope" seems to be overloaded as we have it in other places in
Keycloak too? Now when you click to some Client and then to tab
"Authorization" you can see 2 tabs "Scopes" (one in level1 and second in
level2) but both are used for a bit different thing. Isn't it some
better term like "Action" ? For example "john can do 'action' DELETE on
photoalbum xyz" seems to me more intuitive than "john has 'scope' DELETE
on photoalbum xyz" . Or is this term required by UMA specification?
- Is it possible to merge JSON file representation with the main
keycloak RealmRepresentation? Currently to have "photoz" example
running, I need to import realm ( photoz-uma-realm.json ) and then
separately also another JSON with authorization configuration (
photoz-uma-restful-api-authz.json ). If configuration of ResourceServer
is moved under particular client of realm, it can be exported during
export/import of whole realm and then imported again in single step. We
can still support to import just the authorization configuration though,
but have it supported when inside global file is good too IMO.
- Should be Time-Based Policy the "first-class-citizen" - one of builtin
policies? It seems you can achieve the same with Rule based policies
(Javascript or Drools) ? You can simulate some other simpler policies
like role-based or attribute-based with rule policies too, however they
will be likely much more common usecase.
- Java AuthzClient seems to be directly using Apache HttpClient. Is it
easier to have it as jax-rs (or resteasy) client similarly like our
admin-client? Or you want to avoid another dependency? It seems we
currently have 3 clients (admin-client , client-registration , authz),
so maybe we can somehow unify them to use similar approach and we can
remove some boilerplate code? But this is implementation detail though...
- Is it possible to see the list of available context attributes of
javascript (or drools) policy? Also it's maybe possible to simplify
names? For example 'kc.authz.context.client.network.ip_address' is quite
a long name knowing that this is something, which people will be using
in their impl?
- During the call few months ago, I mentioned the "weight" of
authorization decision of aggregation policy. I want to cancel that as
it looks you can always achieve the same effect by compose more
aggregate policies together, so weight is not needed though. So this is
just un-feedback of my previous feedback :)
- Is it possible to dynamically create permissions with Permissions API?
Looks like just creating resources is possible ATM? For example, I
wonder about classic social usecase "I want to share my photoalbum with
user X" . Or "I want to share my photoalbum with group of users Y
(Google+ circles)" . I guess UMA specs might have some support for this?
- After create new photoalbum in the application, I can see that one new
session is always created (tabs "Sessions" under client). When I delete
photoalbum, I can see 6 (!!!) new sessions created. After create and
delete few albums, I can see 44 active sessions :) I didn't verify what
happens, looks like quite a lot of resource-owner-password-credentials
or client-credentials requests? But seems we have time for optimizations
and polishing later though...
Marek
On 16/06/16 19:12, Pedro Igor Silva wrote:
> Hi All,
>
> After reviewing somethings based on the feedback from Bill and Stian, I've updated both code and docs [1] to reflect what we have discussed.
>
> In a nutshell, I think UX is much better now. With less steps to get things done and in some cases with a default configuration to quickly get started with authorization services.
>
> Special attention to the "Managing Resource Server" [2] section. There you'll understand the main changes that made things more simple.
>
> I'll be working with some getting started tutorials, I think they will be very simple and easy to follow now.
>
> Please, let me know your thoughts.
>
> [1] https://keycloak.gitbooks.io/authorization-services-guide/content/
> [2] https://keycloak.gitbooks.io/authorization-services-guide/content/topics/resource-server/overview.html
>
>
> ----- Original Message -----
> From: "Pedro Igor Silva" <psilva at redhat.com>
> To: "Bill Burke" <bburke at redhat.com>
> Cc: "keycloak-dev" <keycloak-dev at lists.jboss.org>
> Sent: Friday, June 10, 2016 12:55:39 PM
> Subject: Re: [keycloak-dev] Feedback
>
> ----- Original Message -----
>> From: "Bill Burke" <bburke at redhat.com>
>> To: "Pedro Igor Silva" <psilva at redhat.com>
>> Cc: "keycloak-dev" <keycloak-dev at lists.jboss.org>
>> Sent: Friday, June 10, 2016 12:43:51 PM
>> Subject: Re: Feedback
>>
>>
>>
>> On 6/10/16 11:23 AM, Pedro Igor Silva wrote:
>>> ----- Original Message -----
>>>> From: "Bill Burke" <bburke at redhat.com>
>>>> To: "Pedro Igor Silva" <psilva at redhat.com>
>>>> Cc: "keycloak-dev" <keycloak-dev at lists.jboss.org>
>>>> Sent: Friday, June 10, 2016 12:11:37 PM
>>>> Subject: Re: Feedback
>>>>
>>>>
>>>>
>>>> On 6/10/16 10:59 AM, Pedro Igor Silva wrote:
>>>>> ----- Original Message -----
>>>>>> From: "Bill Burke" <bburke at redhat.com>
>>>>>> To: "Pedro Igor Silva" <psilva at redhat.com>
>>>>>> Cc: "keycloak-dev" <keycloak-dev at lists.jboss.org>
>>>>>> Sent: Friday, June 10, 2016 10:39:07 AM
>>>>>> Subject: Re: Feedback
>>>>>>
>>>>>>
>>>>>>
>>>>>> On 6/9/16 11:04 PM, Pedro Igor Silva wrote:
>>>>>>> Bill,
>>>>>>>
>>>>>>> Got the authz stuff working with the adapters. It was a puzzle but I
>>>>>>> think
>>>>>>> I have something.
>>>>>> Yeah, its nasty. Every servlet container handlers security just a bit
>>>>>> differently than others so, its ugly.
>>>>>>
>>>>>>> * I've discarded my own sub-types of AccessToken, they were redundant.
>>>>>>> The
>>>>>>> only difference between authz tokens and access tokens was a list of
>>>>>>> permissions. And the concept behind them is the same. I've added a
>>>>>>> "authorization" claim to AccessToken (null by default) from where
>>>>>>> permissions granted by the server can be obtained.
>>>>>> Is a claim better?
>>>>> To represent a RPT, I believe it is.
>>>>>
>>>>>> Or should AccessTokenResponse optionally contain the RPT?
>>>>> IMO, that would make things harder from a client perspective. See my next
>>>>> comments.
>>>>>
>>>>>> Or optionally a query param for Implicit Flow? Or have both? I
>>>>>> don't know.
>>>>> I think we have two different things here:
>>>>>
>>>>> * How a RPT looks like
>>>>> * How a RPT is obtained (the protocol in use)
>>>>>
>>>>> In the first case, a RPT is just a special type of access token with
>>>>> authorization data on it. Where this data is a result of the evaluation
>>>>> of
>>>>> permissions and authorization policies associated with the resources
>>>>> being
>>>>> requested. Here, that claim represents this data. This is protocol
>>>>> agnostic.
>>>>>
>>>>> The latter case is how you obtain that data, which is strongly associated
>>>>> with the protocol in use. What you said makes a lot of sense, we can
>>>>> issue
>>>>> this authorization data when doing any of the OAuth2 grant types. That
>>>>> can
>>>>> be specially useful when you want to obtain all permissions for an user
>>>>> at
>>>>> once when authenticating in KC, avoiding an additional call to the server
>>>>> in order to obtain authorization specific data. One way to achieve that
>>>>> would be a
>>>>> "Entitlement Protocol Mapper" that is capable of decorating an access
>>>>> token
>>>>> with the authorization data. Thus, transforming the access token into a
>>>>> RPT. See, the client just use the final access token without any
>>>>> additional treatment.
>>>>>
>>>>> There are a lot of other features to implement around both UMA and
>>>>> Entitlement protocols. For instance, claims gathering or obligations. So
>>>>> the server can ask the client for additional information. Eg.: require a
>>>>> higher security level, etc. And for that, we must be able to obtain authz
>>>>> data separately.
>>>> IIRC, there's a REST API right that allows a client to turn an access
>>>> token into an RPT?
>>> Yes, that is what both Authorization and Entitlement API are meant for.
>>>
>>>> So, if Client A gets an access token, it can invoke
>>>> on Service B. Service B can pass the access token to Keycloak to obtain
>>>> an RPT?
>>> Yes you can. The built-in policy enforcers (related with the changes I did
>>> to adapters) can operation in two modes:
>>>
>>> * Bearer Token
>>> * "Stateful" scenario (eg.: monolithic JEE apps)
>>>
>>> In the first case, is up to the client to obtain and send the RPT with the
>>> necessary permissions to access protected resources on the resource
>>> server(Service B). Here you can use two protocols: UMA and Entitlement.
>>> You know UMA. Entitlement is just a more lightweight and 1-legged protocol
>>> based on some UMA concepts. It doesn't require permission tickets and
>>> stuff.
>>>
>>> In the latter case, there is a specific policy enforcer that does exactly
>>> what you described. Obtaining a RPT transparently from a Keycloak server
>>> using the *Entitlement* API.
>>>
>> My only reasoning for wanting the option to include the RPT in the
>> AccessTokenResponse was for performance reasons. Obtaining an RPT could
>> be obtained for free for a specific client by piggybacking on the OAuth
>> protocol, but the access token could remain small/lightweight and not
>> contain the RPT. You'd still want to be able to include the RPT within
>> the AT if so desired, but there might come a point when the AT becomes
>> too fat.
>>
>> All this isn't really important at this time though. What's more
>> important is releasing Authz soon. I just foresese us wanting to
>> provide different optimizations for different environments.
>>
>> Bill
> +1. And that is the reason why I'm following this path now. So far, I was using a very specific token to hold authz data. But as you said, let's discuss about performance and optimizations at the appropriate time and release this stuff first. We can do a lot of things at this regard.
>
> Regarding token size, during this work I did a research about this topic and there are interesting discussions on OAuth2-WG.
>
> Thanks for all feedback, it was really important to improve things.
>
>>
>>
>>
> _______________________________________________
> keycloak-dev mailing list
> keycloak-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/keycloak-dev
> _______________________________________________
> keycloak-dev mailing list
> keycloak-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/keycloak-dev
More information about the keycloak-dev
mailing list