We have a JS App that is making XHR calls to our server to update the user’s profile. The
server will save some of the profile data (e.g preferences) locally and then update some
of the data in keycloak (e.g. name, email).
Currently the way our server is setup, all of the Tomcat/Spring to Keycloak calls are done
to via the keycloak-admin-client as a single user who has a realm admin role.
For example, on that update call that I previously mentioned, here is the java code that
uses the admin client to perform the update with an admin user token (not the logged in
user).
@PostConstruct
public void initilization() {
keyCloak = KeycloakBuilder.builder()
.serverUrl( applicationSettings.getKeycloakApplicationProperties().getAuthServerUrl()
)
.realm( applicationSettings.getKeycloakApplicationProperties().getRealm() )
.username(
applicationSettings.getKeycloakApplicationProperties().getRestClientAdminUser() )
.password(
applicationSettings.getKeycloakApplicationProperties().getRestClientAdminPassword() )
.clientId( applicationSettings.getKeycloakApplicationProperties().getRestClientAdmin()
)
.resteasyClient( new ResteasyClientBuilder().connectionPoolSize( 20 ).build() )
.build();
}
public void updateUser( String userId, UserRepresentation userRep ) {
keyCloak.realm( applicationSettings.getKeycloakApplicationProperties().getRealm() )
.users().get( userId ).update( userRep );
}
Looking at the API for updating a user,
http://www.keycloak.org/docs/rest-api/index.html#_update_the_user It appears that I can
call that with the logged in user’s token and not a generic admin account. This would be
better for auditing since all the updates wouldn’t come from a generic admin account.
Is there a preferred way to do this? Should I create a rest template to make this PUT
call or just simply use the admin java client to make a call on behalf of a regular user?
I’m pretty sure I could get the logged in user’s token out of the Spring Security context,
but there is no way to inject that into the Keycloak admin client object; that object
wants the user’s username and pw to establish a token.
I’m looking on some direction on what is the preferred way to do this.
--
Christopher Savory
Software Engineer | EdLogics
From: Stian Thorgersen <sthorger(a)redhat.com>
Reply-To: "stian(a)redhat.com" <stian(a)redhat.com>
Date: Thursday, October 6, 2016 at 7:37 AM
To: Chris Savory <chris.savory(a)edlogics.com>
Cc: "keycloak-user(a)lists.jboss.org" <keycloak-user(a)lists.jboss.org>, David
Hartfield <david.hartfield(a)edlogics.com>, Danilo Bonilla
<danilo.bonilla(a)edlogics.com>, Ali Elhajj <ali.elhajj(a)edlogics.com>
Subject: Re: [keycloak-user] Looking for a non Admin Java client
I'm honestly lost in what you're trying to achieve, can you please try to explain
it again?
On 4 October 2016 at 06:51, Chris Savory <chris.savory(a)edlogics.com> wrote:
I can use the Admin endpoints, but I would have thought you had to be at least realm-admin
to do that. Are you saying that a user can use the Admin Endpoints/Clent for urls
directly related to themselves? If so, then we can just use that.
--
Christopher Savory
Software Engineer | EdLogics
From: Stian Thorgersen <sthorger(a)redhat.com>
Reply-To: "stian(a)redhat.com" <stian(a)redhat.com>
Date: Monday, October 3, 2016 at 10:32 PM
To: Chris Savory <chris.savory(a)edlogics.com>
Cc: "keycloak-user(a)lists.jboss.org" <keycloak-user(a)lists.jboss.org>, David
Hartfield <david.hartfield(a)edlogics.com>, Danilo Bonilla
<danilo.bonilla(a)edlogics.com>, Ali Elhajj <ali.elhajj(a)edlogics.com>
Subject: Re: [keycloak-user] Looking for a non Admin Java client
Are you saying you want to invoke the Keycloak admin endpoints? You are currently using
the Keycloak Java Admin Client, but you want to use something else? Why use something else
when you already have something?
On 3 October 2016 at 23:21, Chris Savory <chris.savory(a)edlogics.com> wrote:
We need to make several types of calls to KeyCloak from the server side of our
application. Some are in the context of a logged in user and others are not. We have the
latter case handled right now by using the KeyCloak Admin Client. But we are unable to
locate another Java client for the purposes of making calls to KC for the currently
authenticated user. I have found the AuthZ Client, but that appears to just be for
authenticating.
The particular use case I’m researching now is we have an endpoint like
/profile-service/users/current, which will return the currently logged in user profile.
Some of that information comes from KC and some comes from the local app database.
Currently we the app configured to make the server-side call as a KC admin while it is
orchestrating this data, but I’d prefer for the user to use the same credentials as it did
when it came to the server with a BEARER token. This will help us when it comes to
auditing, especially for updates.
Does such a java client exist? Or do I need to use the KeycloakRestTemplate to make those
calls to KC?
--
Christopher Savory
Software Engineer | EdLogics
_______________________________________________
keycloak-user mailing list
keycloak-user(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/keycloak-user