[keycloak-dev] Keycloak.js is inefficient and can be improved
Bill Burke
bburke at redhat.com
Tue Feb 10 17:55:05 EST 2015
On 2/10/2015 11:25 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 at lists.jboss.org
>> Sent: Tuesday, February 10, 2015 1:19:03 PM
>> Subject: Re: [keycloak-dev] Keycloak.js is inefficient and can be improved
>>
>> * implicit flow requires the token to be sent in the URL via a fragment,
>> there's no way around it. This URL is stored in browser history and can
>> be bookmarked.
>
> What about this [1], Section '3.2.2.5. Successful Authentication Response'. There is a statement saying "When using the Implicit Flow, all response parameters are added to the fragment component of the Redirection URI, as specified in OAuth 2.0 Multiple Response Type Encoding Practices [OAuth.Responses], unless a different Response Mode was specified."
>
Not sure what you are getting at. Token is stored as a parameter in the
fragment. So the token is available in the URL (can be bookmarked) and
is stored in browser history. In auth-code-flow, only the code is
stored in the URL. Token is obtained by a background, out-of-band
invocation. Code can be bookmarked or stored in browser history, but it
doesn't matter because the code is only usable once.
> I think a more important issue to worry about when doing oAuth2 implicit flow is how to validate the audience for a specific access token.
>
> [1] http://openid.net/specs/openid-connect-core-1_0.html#ImplicitFlowAuth
>
Not sure what you mean by validating the "audience". You mean how can
the IDP validate the client? It is sort of validated as codes (for
auth-code flow) and tokens (for implicit flow) can only be forwarded to
registered client URL patterns. SSL sort of handles the verification of
the audience.
>>
>> * passing fragment I believe reduces round trips because page caches
>> ignore fragments when indexing pages. On the other hand, a URL with a
>> code query param is always unique, thus can't be cached. So if you can
>> send the code via a fragment parameter, then, you can use the browser cache.
>>
>> * Auth code grant does not require credentials. This is called a public
>> client.
>
> Yeah, sorry. That is only a requirement for confidential clients.
>
>>
>> * Explain how form_post solves anything or removes any legs? The HTML
>> page returned by the server still has to be posted to the application's
>> server, no?
>
> I did not mean form_post would solve legs. But a combination of implicit + response_type + response_mode.
>
> My point is that today KeyCloak always performs authorization code even when you are in a web application, which is a confidential client. Ok, you may have credentials in this case and use authz code to perform the authentication and obtain both access_token and id_token.
>
> However, why not just use an implicit flow where you just need to pass the client_id and right after receive a response with the tokens. In this case, you eliminate the code-to-token flow. That is what I meant.
>
> Actually, you are pretty much doing this if you set an application as public in KeyCloak, right ? The difference here is that you still need to do the code-to-token dance.
>
> IMO, this can be used for pure SSO-based use cases where the app is relying on the KeyCloak Adapters. Eg.: web applications/confidential clients.
>
> Form_post would be just a better way to return tokens back to SPs instead of passing them via query parameters.
>
Only implicit flow passes tokens via URL parameters. Which is one
reason why we don't support implicit flow.
--
Bill Burke
JBoss, a division of Red Hat
http://bill.burkecentral.com
More information about the keycloak-dev
mailing list