[keycloak-user] Keycloak and shared JWT secrets

Sebastien Blanc sblanc at redhat.com
Fri Apr 12 06:12:29 EDT 2019


On Thu, Apr 11, 2019 at 7:57 PM Nolan Darilek <nolan at thewordnerd.info>
wrote:

> Yes, that's the JWT plugin I'm using.
>
>
> I will eventually need roles. Can I do this without enabling
> authorization on the client? I'll be using Caddy's JWT module to
> authorize access to some resources. I don't know if this means I need
> authorization support to enable roles, or if I *don't* need
> authorization support because I'm not asking Keycloak to grant or deny
> access to my pages based on their URLs.
>
Looking at the Caddy JWT plugin, it looks like it can do some basic RBAC ,
it will be looking at the "groups" claim of the token. In Keycloak, roles
are not put by default in a "groups" claim by you can easily do that by
creating a custom mapper. And you don't need authorization enabled for
this.

>
>
> When you say to use a public client because Caddy won't handle this,
> what specifically do you mean? It won't handle setting a public key? It
> does seem to via the JWT_PUBLIC_KEY environment variable as you noted. I
> imagine I'll need to retrieve that from a .well-known endpoint?
> Otherwise, I'm not sure what isn't being handled here. Sorry if I seem
> dense--this is a bit overwhelming and I'd like to get it right.
>
What I meant is it does use the shared secret but the public key for
signature validation. So yes you have to set JWT_PULBIC_KEY harcoded or as
you said maybe the JWT caddy plugin can handle retrieving the key from JKWS
endpoint, if it can in keycloak the endpoint is there :
http://localhost:8180/auth/realms/myrealm/protocol/openid-connect/certs

>
> I'm not using the JS adapter because I don't have an app as such. For
> now I just have some static pages generated by Hugo, and I'm trying to
> gate access to a /members section. In the future I'll probably have a
> few different levels of access, which I'll represent by roles, so
> /members/gold, /members/silver, etc. may be gated by role. This blocking
> is happening on the server side. I'm not immediately clear on how the JS
> library would help in this case, since my pages are just being served up
> directly.
>
> Thanks for the pointer on the wrong redirect URL. I used the /account
> endpoint because it at least prompts me to log in if I'm not. When I say
> that I'm being redirected, I mean that hitting /members doesn't take me
> to the members-only page, but takes me to the account redirect if I'm
> logged into Keycloak, which I definitely am.
>
> Thanks for the help.
>
> On 4/11/19 12:22 PM, Sebastien Blanc wrote:
> > Hi,
> >
> > Are you using
> > https://github.com/BTBurke/caddy-jwt/blob/master/README.md ?
> >
> > So I never used Caddy but a couple of things :
> >
> > * Keycloak uses RSA to sign the token, so you need to specify
> > JWT_PUBLIC_KEY in Caddy and not the JWT_SECRET.
> > * Just use a public client (because Caddy JWT probably don't handle
> > this) and do not enable authorization (you just want authentication
> > right ?)
> > * the redirect field from your config block looks like to be the
> > endpoint for authenticating your user, not sure why you are using the
> > /account endpoint, this is a completely different thing ( this is the
> > "space" where logged-in users can manage their account : reset
> > password etc ...)  , the redirect value would looks like something as :
> >
> >
> http://localhost:8180/auth/realms/myrealmprotocol/openid-connect/auth?client_id=myclient&redirect_uri=http%3A%2F%2Flocalhost%3A8080&response_mode=fragment&response_type=code
> >
> > <
> http://localhost:8180/auth/realms/katacoda/protocol/openid-connect/auth?client_id=quarkus-front&redirect_uri=http%3A%2F%2Flocalhost%3A8080%2F&state=6d7a4fdb-ee71-41d6-846d-1e0a4b7060ab&response_mode=fragment&response_type=code
> >
> >
> > If you are app is just an service endpoint you probably don't need the
> > redirect field to be set since you will obtain the token differently :
> >  You said that you kept being redirected even when you are logged in ,
> > what does that means "logged in"  ? Did you managed to log in with
> > Keycloak ? Are you using the Keycloak Javascript adapter in your
> > webapp to obtain your token ?
> >
> >
> >
> >
> >
> > On Thu, Apr 11, 2019 at 4:38 PM Nolan Darilek <nolan at thewordnerd.info
> > <mailto:nolan at thewordnerd.info>> wrote:
> >
> >     Apologies if the answer to this is simple. I've poured through
> >     every doc
> >     I can get my hands on and am a bit overwhelmed.
> >
> >
> >     I'm trying to set up a shared account service that works across my
> >     static website, forum, and eventually on mobile apps. Given that
> >     security isn't a core competency, I decided to try using Keycloak
> >     for this.
> >
> >
> >     My first goal is to require authentication to example.com/members
> >     <http://example.com/members>. I'm
> >     using the Caddy web server which has a JWT-based protection scheme
> >     built-in. Keycloak is running at example.com/auth
> >     <http://example.com/auth>.
> >
> >
> >     What I *thought* I'd do is set up my website as a confidential client
> >     with authorization enabled. Caddy needs a shared secret for the
> >     JWT, so
> >     I thought this would be the client secret. Also, since my website and
> >     Keycloak are on the same domain, I thought that if they shared a
> >     secret
> >     and if Caddy looked to the KEYCLOAK_IDENTITY cookie, that
> >     authentication
> >     would just work. Alas, no. Here's my Caddy JWT configuration block:
> >
> >
> >     jwt {
> >        path /members
> >        redirect /auth/realms/myrealm/account
> >        token_source header
> >        token_source cookie KEYCLOAK_IDENTITY
> >     }
> >
> >     Visiting /members just redirects me to my account page again and
> >     again,
> >     even if I'm logged in.
> >
> >
> >     Am I completely off the rails here? I thought about using the client
> >     library, but I don't know if that works for confidential
> >     authorization
> >     setups. I don't even know if I *need* a confidential authorization
> >     setup
> >     here, or if I'm completely misunderstanding. It also occurs to me
> >     that
> >     I'm redirecting to /auth/realms/myrealm/account. There's nothing
> >     in that
> >     URL indicating which client to use, and as such, which secret to
> >     generate the JWT with. So before I go too much further down this
> >     rabbit
> >     hole, I wanted to check my assumptions.
> >
> >
> >     Thanks for any help.
> >
> >     _______________________________________________
> >     keycloak-user mailing list
> >     keycloak-user at lists.jboss.org <mailto:keycloak-user at lists.jboss.org>
> >     https://lists.jboss.org/mailman/listinfo/keycloak-user
> >
> _______________________________________________
> keycloak-user mailing list
> keycloak-user at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/keycloak-user


More information about the keycloak-user mailing list