使用密钥斗篷UserStorageProvider SPI

时间:2019-07-11 14:11:34

标签: java keycloak

我已经实现了一个自定义Keycloak UserStorageProvider SPI(遵循官方文档https://www.keycloak.org/docs/latest/server_development/index.html#_user-storage-spi的第11点),该操作如下:

  1. 根据用户身份验证用户(以前不存在于本地存储中) 外部身份验证服务。
  2. 将(根据我们的自定义服务成功通过身份验证的)用户保存到 Keycloak本地商店。
  3. 在将用户导入keycloak的本地存储中之后(在用户之后 成功登录),然后管理员即可映射角色 向那些用户提供来自keycloak管理控制台的资源授权。

我遇到的问题如下:第1步和第2步工作正常。关于第3步,我可以使用保存在密钥斗篷的本地存储中的用户(在外部UserProvider上找到它)成功地登录自己,但是这个问题的症结所在。一旦向该导入的用户添加任何角色,便无法再将我自己登录到该帐户,并且日志显示从那时起该用户登录后不再使用我的自定义UserStorageProvider。以某种方式将角色附加到该用户将使他对于我的自定义UserStorageProvider不可见(即使我再次删除了该角色也是如此)。

在我尝试实现的最佳情况下,即使将角色分配给用户,我也可以与用户“登录”(在通过外部SPI认证后本地保存)。

任何反馈将不胜感激!

预先感谢您的建议。

1 个答案:

答案 0 :(得分:1)

如果将来有人遇到此问题,则在实现提供者SPI时,您将有2个选择,如文档所述。联合存储并将用户导入本地Keycloak存储。如果您采用导入/同步策略,则必须将联邦链接设置为提供程序,如下所示:

<UserModel instance>.setFederationLink(<ComponentModel id>);

如果不执行此操作,则Keycloak无法“记住”那些导入的用户应由您的提供者SPI处理,并且通常您不会在自定义提供者SPI中获得预期的行为。 / p>