[keycloak-dev] Custom federation - webservice

Vlastimil Elias velias at redhat.com
Fri Dec 11 07:15:12 EST 2015



On 11.12.2015 12:19, Marek Posolda wrote:
> I think what we can possibly do is:
>
> 1) Improve KeycloakTransactionManager to allow enlist with "priority"
> . Instead of methods:
>
> void enlist(KeycloakTransaction transaction);
> void enlistAfterCompletion(KeycloakTransaction transaction);
>
> we will have single method:
>
> void enlist(KeycloakTransaction transaction, int priority);
>
> By default, JPA will enlist transaction with priority 10 and
> infinispan with priority 20 or something like that.
>
> This change will allow to enlist your transaction in your
> FederationProvider with exact priority. So you can choose whether the
> commit will happen  before JPA commit, or after JPA commit or even
> after infinispan commit etc.
>

+1, this may help to resolve current problems

> 2) Make TxAwareLDAPUserModelDelegate class more generic and reusable
> for other federation providers

may also help, but point 1 with correct documentation is main what we
have to do

Thanks

Vlastimil

>
> Marek
>
> On 11/12/15 10:50, Vlastimil Elias wrote:
>> Hi,
>>
>> I use similar approach and problem is (at least I think) that local
>> DB transaction is already commited when our code runs. It has two
>> negative effects:
>> - if remote service call is successful you are not able to write
>> anything locally as Jorge mentioned
>> - if remote service call fails local DB record is commited already
>> and it is hard to implement correct error handling
>>
>> So I think User Federation SPI should be extended by exact method
>> which allows atomic call of backend during user creation or update
>> before local transaction is commited. I already created issue for it
>> but not resolved yet https://issues.jboss.org/browse/KEYCLOAK-1075
>>
>> Vlastimil
>>
>> On 10.12.2015 18:49, Jorge M. wrote:
>>>
>>> Hi,
>>>
>>> I think I'm in the right track now. I'm being able to call the
>>> webservice before commit. However, when the user is sucessfully
>>> created by the webservice, I need to update my local user to add a
>>> property with the external user id. How can I do that in the same
>>> transaction?
>>> I'm trying to set the property on the managed delegate user model,
>>> but it has no effect.
>>>
>>> Thank you!
>>>
>>> On 9 Dec 2015 18:39, "Marek Posolda" <mposolda at redhat.com> wrote:
>>>
>>>     On 09/12/15 19:33, Jorge M. wrote:
>>>>
>>>>     I'm developing a custom federation that communicates with my
>>>>     user repository via webservices.
>>>>     Probably this is a very strange scenario for a federation but
>>>>     that's the unique way that I have to communicate with the
>>>>     repository.
>>>>
>>>>     My problem is that, as the webservices only exposes methods
>>>>     such as createUser and updateUser, I'm having problems with
>>>>     registrations and user profile updates because I'm not being
>>>>     able to do atomic calls to the webservice methods, with all the
>>>>     information that I need.
>>>>
>>>>     As far as I know, from the properties file example and from the
>>>>     ldap federation source (probably I'm missing something) it
>>>>     seems that the federation api is intended to update and sync
>>>>     attribute by attribute (Keycloak <-> Federation).
>>>>     Am i wrong? Do you suggest another approach? Should I give up
>>>>     from having a federation that uses a webservice?
>>>>
>>>     You can use "transaction wrapper", which will allow you to store
>>>     all the updates to user locally, but send the UPDATE request to
>>>     your webservice later at transaction commit time. You may need
>>>     to create custom transaction and enlist it with Keycloak
>>>     TransactionManager.
>>>
>>>     This is what we have for LDAP federation provider right now. See
>>>     TxAwareLDAPUserModelDelegate.
>>>
>>>     Marek
>>>>
>>>>     Thank you.
>>>>
>>>>
>>>>
>>>>     _______________________________________________
>>>>     keycloak-dev mailing list
>>>>     keycloak-dev at lists.jboss.org <mailto: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
>>
>> -- 
>> Vlastimil Elias
>> Principal Software Engineer
>> Developer Portal Engineering Team
>>
>>
>> _______________________________________________
>> keycloak-dev mailing list
>> keycloak-dev at lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/keycloak-dev
>

-- 
Vlastimil Elias
Principal Software Engineer
Developer Portal Engineering Team

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/keycloak-dev/attachments/20151211/e69aa8c5/attachment.html 


More information about the keycloak-dev mailing list