通过遵循this Keycloak开发人员指南,我试图编写一个SPI扩展,以帮助将自定义用户服务(将其视为具有大量处理用户数据的CRUD REST API的数据存储) 。
我想要实现的一个基本方案是,当新用户通过Keycloak登录时,需要通过创建用户条目将其信息传播到自定义用户服务。
通过实现UserRegistrationProvider
接口,我的提供程序中具有以下方法。
@Override
public UserModel addUser(RealmModel realm, String username) {
log.infov("Adding new user: username={0}", username);
User user = new User();
// do something to populate the user object with additional attributes, e.g. those edited via the Keycloak console UI
UserModel userModel = createAdapter(realm, user);
return userModel;
}
奇怪的是,此接口方法仅将username
参数作为字符串接收。我不知道如何访问其他用户属性。我在此问题下面找到了两个帖子。
UserRegistrationProvider value object add method
Custom federation - webservice
Keycloak团队的答复是,只有在提交事务后,事务包装器才能应用于持久更改。 good example是LDAP联合的正式实现。 this是LDAP事务的源代码。
但是该代码部分太多了,无法阅读。如果有人可以提供一种简单明了的实现方式,请对此表示赞赏。
答案 0 :(得分:0)
在通读LDAP提供程序上Keycloak的源代码后,我发现数据持久化步骤可以发生在customised transaction中,即在主事务之后的enlisted中。
上面引用的存储库是我尝试过的基于文件的Keycloak用户存储提供程序。希望它可以对此提供一些见解。