当前位置: 首页 > 知识库问答 >
问题:

实现自定义密钥斗篷身份验证器SPI时出现问题

邵凯定
2023-03-14

我试图实现一个自定义密钥克拉克身份验证器SPI,用于对外部身份提供程序进行身份验证。用户已经存在于keycloak存储中,我只需要连接到自定义SPI来验证他们。

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

 // org.keycloak.authentication.AuthenticationProcessor - line 876
    if (authenticationSession.getAuthenticatedUser() == null) {
         throw new AuthenticationFlowException(AuthenticationFlowError.UNKNOWN_USER);
    } 
// 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;

共有1个答案

昌博易
2023-03-14

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

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

即使它现在起作用,您的两个建议都是有效的,因为我的构建版本确实不同于运行时的版本,我将解决这一点,以避免进一步的bug。

谢谢你们的投入!

 类似资料:
  • 我需要在自定义密钥斗篷SPI身份验证器中处理用户的取消。我实现了它,它工作得很好。我所需要的是取消登录流程,并从用户点击取消时的乞讨开始 在我的例子中,我得到了登录页面,但URL错误: http://localhost:8080/auth/realms/realm1/login-actions/authenticate?execution=bb1fb7c3-0b59-4a07-b997-b619c

  • 我正在尝试实现一个自定义密钥克拉克身份验证器SPI,用于针对外部数据源/REST服务进行身份验证。计划是将它们迁移到Keycloak。 成功后,在keycloak数据源上创建用户。 创建自定义映射器以在令牌上添加额外的用户属性。 我正在遵循官方指南https://www.keycloak.org/docs/latest/server_development/index.html#_auth_spi

  • 我向我的领域添加了一个自定义OIDC身份提供者,我想使用直接访问授权流(或< code>grant_type=password),但这不起作用。 钥匙斗篷有可能吗? 当尝试使用授权代码流程时,一切正常,但使用时出错 被退回。 我正在尝试获取访问令牌 e 刷新令牌执行以下请求: 这是身份提供者配置:这是身份提供者配置

  • 嗨,好几天了,我都被困在这上面了!在使用本指南转换我的react应用程序后,我尝试使用KeyClope对我的electron应用程序进行身份验证。 当我运行'npm运行电子:dev'时,keyCloak会重定向到登录页面。然而,当我运行'npm运行电子:prod'这失败。 来自KeyClope服务器的日志显示: 请注意,重定向_uri是'file:///...“我相信这就是原因。 我也试图改变下面

  • 注意:我正在使用Spring Boot 2.1.10和Keycloak 6.0.1,我希望我可以在Web应用程序(MVC)的启动时在基本身份验证和SSO之间进行选择。所以我首先将Spring Security Keycloak与keycloak-spring-boot-starter集成 然后我定义了一个“sso”Spring配置文件和一个默认配置: application.properties是

  • 关于我在Spring安全方面的问题,我想请求你的帮助。我有一个要求,其中我必须验证登录凭据的基础上的选项所选择的用户。选项1将通过第三方服务验证登录用户。选项2将是使用数据库身份验证级别的常规验证。我如何实现这一点?