gpt4 book ai didi

java - 实现自定义 Keycloak 身份 validator SPI 时遇到的问题

转载 作者:行者123 更新时间:2023-11-29 08:22:05 24 4
gpt4 key购买 nike

我正在尝试实现一个自定义 keycloack Authenticator SPI,用于针对外部身份提供者进行身份验证。用户已经存在于 keycloak 存储中,我只需要连接到自定义 SPI 即可对他们进行身份验证。

我正在遵循官方指南 https://www.keycloak.org/docs/latest/server_development/index.html#_auth_spi_walkthrough 的第 8.3 节,这与我需要的非常相似。

我遇到的问题是,在身份验证流程运行到自定义身份 validator 的“action”方法之后,AuthenticationProcessor 类会抛出异常,经过检查后,来自以下检查:

 // org.keycloak.authentication.AuthenticationProcessor - line 876
if (authenticationSession.getAuthenticatedUser() == null) {
throw new AuthenticationFlowException(AuthenticationFlowError.UNKNOWN_USER);
}

看到这个问题后,我尝试解决它的想法是从 keycloak 存储中获取用户(已经针对外部身份提供者进行了验证),并将其推送到 AuthenticationSession 中,如下所示:

// Connect against external Service Provider
// and asume "USER_ID" represents an already validated User

// AuthenticationFlowContext = afc is given as parameter
UserFederationManager ufm = afc.getSession().users(); // <-- PROBLEM
UserModel userFound = ufm.getUserById("USER_ID", afc.getRealm());

if (userFound != null) {
// get reference to the authSession
AuthenticationSessionModel asm = afc.getAuthenticationSession();
// set authenticated user on the session
asm.setAuthenticatedUser(userFound );
return true;
}
return false;

上述代码的问题在于,关于 org.keaycloak.models.KeycloackSession 类的 users() 方法抛出了 Java NoSuchMethodExceptionError。像这样:

11:26:32,628 ERROR [org.keycloak.services.error.KeycloakErrorHandler] (default task-14) Uncaught server error: java.lang.NoSuchMethodError: org.keycloak.models.KeycloakSession.users()Lorg/keycloak/models/UserFederationManager;

如果您能提出任何建议来帮助我解决这个问题,我们将不胜感激!

最佳答案

问题似乎是我使用的是 org.keycloak.models.UserFederationManager 实例,而不是 org.keycloak.models.UserProvider 实例。 UserFederationManager 实现了 UserProvider,并且在该 keycloak 使用的注入(inject)机制下,似乎更通用的类型比更具体的类型效果更好

 // UserFederationManager ufm = afc.getSession().users();   // <-- PROBLEM
// UserProvider ufm = afc.getSession().users(); // <-- WORKS

即使它现在可以工作,您的两个建议都是有效的,因为我的构建版本确实与运行时的版本不同,我将解决这个问题以避免进一步的错误。

感谢您的意见,伙计们!

关于java - 实现自定义 Keycloak 身份 validator SPI 时遇到的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56867627/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com