【发布时间】: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