[keycloak-dev] Custom user federation after 2.5.x
Jorge M.
jm85martins at gmail.com
Thu Jan 26 11:42:27 EST 2017
Bill,
Thank you! I will try to do that!
Cheers,
JM
2017-01-26 15:35 GMT+00:00 Bill Burke <bburke at redhat.com>:
> I'm sorry, this usecase fell through the cracks when redesigning the SPI.
>
> I'm guessing you need something that works with registration, REST API,
> and admin console? If so, I think this will work. It will be nasty
> though.
>
> Let's say your provider class name is MyUserStorageProvider.
>
> 1. Define a value object class that implements UserModel and keeps all
> updates in memory. Let's call it UserValueObject.
>
> 2. Define a class that implements the KeycloakTransaction interface.
> This class will be responsible for adding the user to the external store
> just before transaction commit. It will just callback to
> MyUserStorageProvider.
>
> public class AddUserSynchronization implements KeycloakTransaction {
>
> MyUserStorageProvider provider;
>
> UserValueObject valueObject;
>
> public AddUserSynchronization(MyUserStorageProvider provider,
> UserValueObject valueObject) {
>
> this.valueObject = valueObject;
>
> this.provider = provider;
>
> }
>
> public void commit() {
>
> this.provider.addUser(UserValueObject valueObject);
>
> }
>
> }
>
> 3. In your MyUserStorageProvider.addUser(RealmModel realm, String
> usernmae) method, allocate and return the value object and register with
> the KeycloakTransactionManager.
>
>
> public UserModel addUser(RealmModel realm, String username) {
>
> UserValueObject valueObject = new UserValueObject();
>
> StorageId id = new StorageId(providerComponentId, externalIdOfUser);
>
> valueObject.setId(id.getId());
>
> valueObject.setUsername(username);
>
> session.getTransactionManager().enlistPrepare(new
> AddUserSynchronization(this, valueObject));
>
> return valueObject;
>
> }
>
>
> Does this make sense?
>
>
>
> On 1/26/17 6:32 AM, Jorge M. wrote:
> > Hi,
> >
> > It seems that some of the internal SPI's that supported custom federation
> > development in previous versions are now deprecated.
> > I'm looking at the new examples (jpa and simple) but I'm struggling with
> > the registration method.
> > My problem is that to use a custom webservice or a jpa implementation, I
> > need to know the basic user information at that point in order to do the
> > registration on my federation (name, email, username, ...) as the schema
> or
> > WS as non nullable / mandatory fields.
> > Is there any way to get that managed data at that point? (In the past I
> > used a solution based on TxAwareLDAPUserModelDelegate)
> >
> > >From the jpa example:
> >
> > @Override
> > public UserModel addUser(RealmModel realm, String username) {
> > UserEntity entity = new UserEntity();
> > entity.setId(UUID.randomUUID().toString());
> > entity.setUsername(username);
> >
> >
> >
> > *//GET first name, last name and email here!!*
> > em.persist(entity);
> > logger.info("added user: " + username);
> > return new UserAdapter(session, realm, model, entity);
> > }
> >
> >
> > Thank you.
> > JM
> > _______________________________________________
> > keycloak-dev mailing list
> > keycloak-dev at lists.jboss.org
> > https://lists.jboss.org/mailman/listinfo/keycloak-dev
>
> _______________________________________________
> 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