我已经实现了一个自定义Keycloak UserStorageProvider SPI(遵循官方文档https://www.keycloak.org/docs/latest/server_development/index.html#_user-storage-spi的第11点),该操作如下:
我遇到的问题如下:第1步和第2步工作正常。关于第3步,我可以使用保存在密钥斗篷的本地存储中的用户(在外部UserProvider上找到它)成功地登录自己,但是这个问题的症结所在。一旦向该导入的用户添加任何角色,便无法再将我自己登录到该帐户,并且日志显示从那时起该用户登录后不再使用我的自定义UserStorageProvider。以某种方式将角色附加到该用户将使他对于我的自定义UserStorageProvider不可见(即使我再次删除了该角色也是如此)。
在我尝试实现的最佳情况下,即使将角色分配给用户,我也可以与用户“登录”(在通过外部SPI认证后本地保存)。
任何反馈将不胜感激!
预先感谢您的建议。
答案 0 :(得分:1)
如果将来有人遇到此问题,则在实现提供者SPI时,您将有2个选择,如文档所述。联合存储并将用户导入本地Keycloak存储。如果您采用导入/同步策略,则必须将联邦链接设置为提供程序,如下所示:
<UserModel instance>.setFederationLink(<ComponentModel id>);
如果不执行此操作,则Keycloak无法“记住”那些导入的用户应由您的提供者SPI处理,并且通常您不会在自定义提供者SPI中获得预期的行为。 / p>