Hey Bill, 

thanks for the clarification! We're also building a pure client side JavaScript application which calls a bunch of stateless REST services. I'm looking for the best way to secure those REST services and add a log-in mechanism to the UI. 

Now I looked at the new example customer-app-js which will be included in the Alpha 3 release and saw that you are using bearer tokens there. So far, I thought that the HttpOnly cookie mechanism was the preferred way to handle OAuth in a pure client side app which uses stateless REST services. In that scenario, I was just going to add a request interceptor in my JS application, where I would handle unauthorized responses with either a refresh token or a redirect to the log-in page. What do you think?

Cheers,
Nils


On Tue, Mar 11, 2014 at 2:14 PM, Bill Burke <bburke@redhat.com> wrote:
The adapters do not set any cookies except the temporary OAUTH *state*
cookie.  The demo examples remember authenticated sessions by storing
the token in the HttpSession.

The admin console is really just a bunch of stateless REST services
which is why it sets the Identity cookie.  What you're seeing is a bug
in Resteasy as the cookie is created with HttpOnly set to true.

https://issues.jboss.org/browse/RESTEASY-1026

On 3/11/2014 8:59 AM, Nils Preusker wrote:
> digging a bit deeper... I looked for usages of HttpFacade.setCookie and
> noticed that HttpOnly always seems to be set to false... If I understood
> the log-in mechanism for pure client side JavaScript applications
> correctly, it was supposed to be based on a HttpOnly cookie, which makes
> it impossible for scripts (so the JavaScript application) to access the
> cookie.
>
> Am I missing something?
>
> Cheers,
> Nils
>
>
> On Tue, Mar 11, 2014 at 12:08 PM, Nils Preusker <n.preusker@gmail.com
> <mailto:n.preusker@gmail.com>> wrote:
>
>     Hey guys,
>
>     I just looked at the login mechanism and the communication between
>     the admin console and the backend in the alpha 2 release again. If
>     I'm not mistaken, you used to use HTTP-only for the
>     KEYCLOAK_SAAS_IDENTITY cookie. Did something change about that in
>     alpha 2? When I look at the HTTP requests in the chrome developer
>     console, I don't see the HttpOnly flag anywhere.
>
>     Cheers,
>     Nils
>
>
>     On Thu, Jan 30, 2014 at 5:23 PM, Stian Thorgersen <stian@redhat.com
>     <mailto:stian@redhat.com>> wrote:
>
>
>
>         ----- Original Message -----
>          > From: "Bill Burke" <bburke@redhat.com <mailto:bburke@redhat.com>>
>          > To: keycloak-user@lists.jboss.org
>         <mailto:keycloak-user@lists.jboss.org>
>          > Sent: Thursday, 30 January, 2014 3:46:52 PM
>          > Subject: Re: [keycloak-user] Keycloak and OAuth 2.0 Resource
>         Owner Password Credentials Grant
>          >
>          >
>          >
>          > On 1/30/2014 9:29 AM, Nils Preusker wrote:
>          > > Hey Bill, thanks for the clarification, I didn't realize
>         that the cookie
>          > > was Http-only, neat!
>          > >
>          > > We are building a pure HTML5 client that is also hosted
>         separately from
>          > > the REST-backends. The thing is that we use a reverse proxy
>         so for the
>          > > browser it all looks like one app since everything comes
>         from different
>          > > paths in the same domain.
>          > >
>          > > I'll try to clarify the last part of my last mail: We are
>         currently
>          > > using
>         org.jboss.resteasy.skeleton.key.as7.OAuthAuthenticationServerValve
>          > > (skeleton-key-as7) in our REST-backend modules. If I'm not
>         mistaken,
>          > > some parts of the code base and concepts are the same as in
>         keycloak,
>          > > right?
>          > >
>          > > So far, in the AngularJS application we've been adding
>         bearer tokens to
>          > > the HTTP Authorization header. Since the backend uses
>         JAX-RS/ RestEasy,
>          > > the verification of the bearer tokens was done transparently by
>          > > OAuthAuthenticationServerValve and RESTEasy automatically
>         added the
>          > > roles etc. to the HttpServletRequest. Now in the REST
>         backend of the
>          > > admin app in keycloak you're doing the same thing
>         (validating the tokens
>          > > and extracting the roles) manually with the
>         AuthenticationManager
>          > > (authenticateSaasIdentityCookie(...)). So I was just
>         wondering whether
>          > > you are planning to make that process more transparent in
>         the future?
>          > >
>          >
>          > We're doing it manually because the original idea was that
>         the admin
>          > service could manage multiple organizations  (a SaaS), so
>         you'd have to
>          > set up the cookie path's correctly.
>          >
>          > For your app, it sounds like @RolesAllowed will work.  You
>         just have to
>          > set up the appropriate web.xml security constraints for your
>         REST urls
>          > in web.xml.  Just set up the REST apis to require
>         authentication and let
>          > @RolesAllowed do the rest.  The keycloak jboss/wildfly
>         adapter can
>          > handle BEARER token auth at the same time as regular browser
>         oauth.  If
>          > the server is initiating the login, then you can just follow
>         the current
>          > keycloak examples.  If not, then the Javascript lib Stian
>         wrote is an
>          > option (and something we'll have to document).
>
>         JS lib needs a bit of work as well, if it's something you want I
>         can make it a priority
>
>          >
>          >
>          >
>          > --
>          > Bill Burke
>          > JBoss, a division of Red Hat
>          > http://bill.burkecentral.com
>          > _______________________________________________
>          > keycloak-user mailing list
>          > keycloak-user@lists.jboss.org
>         <mailto:keycloak-user@lists.jboss.org>
>          > https://lists.jboss.org/mailman/listinfo/keycloak-user
>          >
>         _______________________________________________
>         keycloak-user mailing list
>         keycloak-user@lists.jboss.org <mailto:keycloak-user@lists.jboss.org>
>         https://lists.jboss.org/mailman/listinfo/keycloak-user
>
>
>
>
>
> _______________________________________________
> keycloak-user mailing list
> keycloak-user@lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/keycloak-user
>

--
Bill Burke
JBoss, a division of Red Hat
http://bill.burkecentral.com
_______________________________________________
keycloak-user mailing list
keycloak-user@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/keycloak-user