【问题标题】:Keycloak-6.0.1 Custom Authenticator SPIKeycloak-6.0.1 自定义身份验证器 SPI
【发布时间】:2019-12-19 14:32:52
【问题描述】:

我正在尝试实现自定义 keycloack Authenticator SPI,以针对外部数据源/Rest 服务进行身份验证。计划是将它们迁移到 keycloak 中。

更新了浏览器流程(复制并创建了一个新流程并绑定它)。

用户首次登录时,将显示自定义主题登录屏幕。

提交时使用自定义 SPI 对外部服务进行身份验证。

成功后在 keycloak 数据源上创建用户。

创建自定义映射器以在令牌上添加额外的用户属性。

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

另外,跟随示例(https://github.com/keycloak/keycloak/tree/master/examples/providers/authenticator)我认为说明没有将其映射到新版本。

例如: 在您的副本中,单击“操作”菜单项和“添加执行”。选择秘密问题。

在 Keycloak-6.0.1 中,没有“Pick Secret Question”这样的执行。我真的不需要这个,但我至少试图设置这个流程来掌握流程的工作方式。

接下来,您必须注册您创建的所需操作。单击身份验证菜单中的必需操作选项卡。单击注册按钮并选择新的必需操作。

所需操作上没有这样的注册按钮。

我做过的事情。 开创了新境界 注册的 UI 客户端 在 keycloak 表的新领域中创建了新用户。 登录时的 UI 重定向到 Keycloak UI 并成功通过身份验证并能够使用 javascript 适配器成功检索令牌

componentDidMount = () => {
        const keycloak = Keycloak('/keycloak.json');
        keycloak.init({onLoad: 'login-required'}).then(authenticated => {
            this.setState({ keycloak: keycloak, authenticated: authenticated })
        })
    }

....
....

if(this.state.keycloak) {
            if(this.state.authenticated) return (
                <div className="contact-body">
                 <p>Name: {this.state.name}</p>
                 <p>Email: {this.state.email}</p>
                 <p>ID: {this.state.id}</p>
               </div>
              );
      }
}

希望将 Keycloak 登录 UI 功能(如 OTP)与自定义身份验证器 SPI 一起使用。在自定义身份验证器中,SPI 获取用户名和密码等表单字段,并使用外部服务对其进行身份验证。然后在 Keycloak DB 中创建用户。

管理员可以在 keycloak 中锁定/暂时挂起领域内的用户吗?

我计划使用的另一个选项是,更新 login.ftl onsubmit 以将用户名/密码发布到自定义服务,并将 keycloak url 作为查询参数传递。
将根据自定义服务对其进行验证,在 keycloak 数据库上创建用户并重定向到通过查询参数传递的 keycloak url。这似乎不是正确的方法。

任何帮助/想法都会非常有帮助。

【问题讨论】:

  • 嘿安东尼,你解决了吗?你能分享你的代码吗?我也有同样的问题!

标签: java authentication keycloak keycloak-services


【解决方案1】:

这是您正在实施的错误 SPI。 对于外部数据源或服务集成,您必须实现自定义 User Storage SPI

【讨论】:

    【解决方案2】:

    您应该使用“用户存储 SPI”。这将是Keycloak Doc 上的第 11 节

    如果您需要额外/自定义身份验证(如秘密问题),则需要第 8 节。

    【讨论】:

      猜你喜欢
      • 2020-04-01
      • 2022-12-10
      • 1970-01-01
      • 1970-01-01
      • 2018-09-26
      • 2020-12-02
      • 2021-04-16
      • 2010-12-17
      • 1970-01-01
      相关资源
      最近更新 更多