Java 使用KeyClope UserStorageProvider SPI时出现问题

Java 使用KeyClope UserStorageProvider SPI时出现问题,java,keycloak,Java,Keycloak,我已经实现了一个定制的KeyClope UserStorageProvider SPI(遵循官方文档第11点:),它实现了以下功能: 根据 外部身份验证服务 将(已针对我们的自定义服务成功进行身份验证)用户保存到 钥匙斗篷本地商店 将用户导入keydove的本地存储后(在用户之后 成功登录),管理员就可以映射角色 从KeyClope的管理控制台向这些用户发送资源授权 我遇到的问题如下:第1步和第2步工作得很好。关于第3步,我可以成功地将自己登录到一个保存在KeyClope本地存储中的用户(在外部

我已经实现了一个定制的KeyClope UserStorageProvider SPI(遵循官方文档第11点:),它实现了以下功能:

  • 根据 外部身份验证服务
  • 将(已针对我们的自定义服务成功进行身份验证)用户保存到 钥匙斗篷本地商店
  • 将用户导入keydove的本地存储后(在用户之后 成功登录),管理员就可以映射角色 从KeyClope的管理控制台向这些用户发送资源授权
  • 我遇到的问题如下:第1步和第2步工作得很好。关于第3步,我可以成功地将自己登录到一个保存在KeyClope本地存储中的用户(在外部UserProvider上找到该用户后),但是(问题的症结在于此);一旦我向导入的用户添加了任何角色,我就无法再登录该帐户,并且日志显示,从该用户登录时起,我的自定义UserStorageProvider就不再被使用。以某种方式将角色附加到该用户会使他对我的自定义UserStorageProvider不可见(即使我再次删除该角色)

    在我试图实现的最佳情况下,我将能够与用户“登录”(从外部SPI身份验证后保存在本地),即使在为用户分配角色之后也是如此

    任何反馈都将不胜感激


    提前感谢您的建议。

    如果将来有人遇到此问题,当您实现提供商SPI时,您有两个选项,如文档所述。联邦存储和将用户导入本地KeyClope存储。如果您使用导入/同步策略,则有必要设置与提供程序的联合链接,如下所示:

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

    如果您不这样做,那么Key斗篷就无法“记住”那些导入的用户应该由您的提供商SPI处理,并且通常您的自定义提供商SPI不会有预期的行为。

    tony_008。谢谢你的提示。我试图实现同样的目标,但在keyclaok_6.01上遇到了问题。您正在使用的密钥斗篷版本。您是否可以共享代码的步骤和关键方面。我正在尝试实现类似()的验证器,我使用的是相同的版本。您正在执行自定义身份验证程序SPI(链接的第8节);我主要关注用户提供者SPI(链接的第11节),两者有相似之处,但也有不同之处。你有什么类型的具体问题?你能创建一个问题并分享一个链接吗,因为这里的评论空间非常有限。谢谢@tony_008。在阅读了第11节之后,我发布了我的问题(),似乎更正确。我会更详细地研究。同时,如果你能提供步骤和指导,那会更有帮助。