[keycloak-dev] Custom user federation after 2.5.x

Stian Thorgersen sthorger at redhat.com
Thu Jan 26 14:14:18 EST 2017


Do you have auto flush on or something? The db shouldn't complain until
flush/commit occurs which is only after all fields are filled in.

On 26 January 2017 at 17:42, Jorge M. <jm85martins at gmail.com> wrote:

> 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
> >
> _______________________________________________
> 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