[keycloak-dev] token exchange
Pedro Igor Silva
psilva at redhat.com
Mon Jul 31 11:35:07 EDT 2017
On Fri, Jul 28, 2017 at 5:24 PM, Bill Burke <bburke at redhat.com> wrote:
> I've implemented a simple token exchange API [1] that allows you to
> exchange an access token created for one client to another client. The
> REST API follows the oauth token exchange api [2] very loosely.
>
> subject_token: a keycloak access token
>
> audience: takes a client id
>
> It then converts the access token created for one client and converts it
> to another. It lives under the token endpoint.
>
> The security model is as follows:
>
> * Authenticate calling client the same way as password grant.
>
> * The calling client must have service account enabled
>
> * Service account must have a realm role "token-exchanger" grant edto it
> or, it must have a client role "token-exchanger" granted to it. This
> exchanger client role is a role defined by the target client you are
> exchanging the token to.
>
>
> Is this a good security model? I'm thinking of not creating these roles
> right now and to enable support for exchange would require defining the
> roles specified above.
>
I think roles are too coarse-grained to represent this kind of policy. A
better option would be to explicitly define the clients that are allowed to
exchange tokens for a particular resource server. Eg.:
RS A allows Client B, C and D to exchange their tokens where the target
audience is RS A (or if using "resource", a specific resource in RS A).
>
>
> Future work would be to have an additional subject_issuer and
> requested_issuer parameters. "subject_issuer" would match to a broker
> alias, so you could exchange a facebook token for a keycloak realm
> token. Same thing goes for "requested_issuer". This would allow you to
> exchange a Keycloak token for a facebook token or some other registered
> broker.
>
I'm following your discussion in OAuth2 WG. Do we really need these
additional paramerters ?
My understanding from the specs is that:
* Facebook -> Keycloak Realm
If you pass a "subject_token_type" like
"urn:keycloak:params:oauth:token-type:broker-{ALIAS}", where {ALIAS} is the
alias of the broker configured to your realm. Assuming {ALIAS} maps to a
Facebook broker in your realm, you probably know how to exchange the FB
opaque access token to a Keycloak realm token.
* Keycloak -> Facebook
If you pass a "requested_token_type" like
"urn:keycloak:params:oauth:token-type:broker-{ALIAS}", where {ALIAS} is the
alias of the broker configured to your realm. Assuming {ALIAS} maps to a
Facebook broker in your realm, you probably know how to exchange the
Keycloak token to a FB token.
Or are you thinking about something else ?
>
>
> [1] https://github.com/keycloak/keycloak/pull/4362
>
> [2] http://www.ietf.org/id/draft-ietf-oauth-token-exchange-09.txt
>
>
>
> _______________________________________________
> 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