KEYCLOAK:使用自定义用户存储 SPI 的 OTP
KEYCLOAK: OTP using a custom user storage SPI
你好,我想知道是否有人知道如何在带有自定义用户存储 SPI 的密钥斗篷中使用 OTP 实现 2fa。
我的 SQL 服务器数据库已经有了一个扩展,我可以使用他们的密码 (BCrypt) 登录。但是,我无法为他们配置 OPT,因为他们是只读用户(联合用户)。阅读文档,我发现来自 LDAP 的用户可以同步到 keycloak 中以能够执行此操作(显然有写入开销)。
有没有人知道如何做到这一点?或者,如何在不在本地缓存它们的情况下启用它?
先谢谢大家
好吧,对于任何对此感兴趣的人来说,在 keycloak 上实现这一点并不难,您只需要了解 keycloak 不会将联合用户视为自己的用户(因此不可能让他们可编辑,据我所知)。
那么,我怎样才能用 keycloak 解决 2FA?很简单,一旦你摆脱了从 keycloak 实现 TOTP 或 HOTP 的想法,你就可以使用 OTP 的现有形式创建你自己的 2FA 实现。
复制这个的步骤是:
- 创建联合用户存储(如果您正在阅读这个问题,我猜这并不难)
- 创建一个 rest-api 用于与 keycloak 和您的 user-store 交互(此步骤是可选的,我这样做是因为我的 back-end 在 .Net 上并且我想要我的所有身份验证keycloak 中的逻辑)所以你可以为你的 2FA 生成秘密(OTP 私钥,SMS phone 号码,...)
- 创建自定义身份验证 class 并使用 OTP 表单读取数据(不用担心,您可以自定义它的标题和标签,也可以使用属性将其设为可选来自您的用户存储)
为此,我基本上必须下载 keycloak 的源代码并分析它如何使用密码和 OTP 在内部进行身份验证。
如果有人对此感兴趣,可以私信我
好吧,我之前的回答是错误的,我会把它留在那里只是因为它可能对其他人有用,所以,这里是关于如何做到这一点的完整历史...
我的外部数据库支持完整的 OTP
好吧,终于在一个多星期后(在我的新项目上)我用 Keycloak 18.0 完成了这个工作。您需要做什么?简单来说,您必须执行身份验证工作流程中的每一步:
- 创建您的用户存储 SPI
- 实施凭据更新 SPI
- 实施自定义凭据提供程序 SPI
- 实施自定义所需操作 SPI
- 实施您的身份验证器 SPI
- 实现你的表单(我有点用了 KC 中的内部 OTP 表单)
- 启用您需要的操作
- 创建浏览器工作流程的副本并在其中粘贴您的身份验证器
我们从中得到了什么?
- 我们得到一个完全可定制的 OTP 验证器(领域的政策待定...)
- 您可以在您的应用程序中使用该代码进行验证(它在您的数据库中),例如,用户已经通过身份验证,然后您想要验证 password/code 以确认某些操作
- 您可以在您的应用中为用户设置 OTP 身份验证(不涉及 KC 管理页面,因此,您可以将管理页面留在 firewall/proxy 之外)
在我看来,这有点烦人,因为我们必须做很多循环才能在本地存储我们的数据以及如何处理集成的 OTP 表单(为了“自然的外观”) ,但它让我可以完全控制我的 OTP 集成,而且,我可以备份我的数据库并且他们的 OTP 身份验证仍然存在,所以,如果我在 KC 升级中失败或它被损坏,我仍然拥有所有这些数据。
最后,这是当您的经理拥有自定义 OTP 身份验证时的样子
你好,我想知道是否有人知道如何在带有自定义用户存储 SPI 的密钥斗篷中使用 OTP 实现 2fa。
我的 SQL 服务器数据库已经有了一个扩展,我可以使用他们的密码 (BCrypt) 登录。但是,我无法为他们配置 OPT,因为他们是只读用户(联合用户)。阅读文档,我发现来自 LDAP 的用户可以同步到 keycloak 中以能够执行此操作(显然有写入开销)。
有没有人知道如何做到这一点?或者,如何在不在本地缓存它们的情况下启用它?
先谢谢大家
好吧,对于任何对此感兴趣的人来说,在 keycloak 上实现这一点并不难,您只需要了解 keycloak 不会将联合用户视为自己的用户(因此不可能让他们可编辑,据我所知)。
那么,我怎样才能用 keycloak 解决 2FA?很简单,一旦你摆脱了从 keycloak 实现 TOTP 或 HOTP 的想法,你就可以使用 OTP 的现有形式创建你自己的 2FA 实现。
复制这个的步骤是:
- 创建联合用户存储(如果您正在阅读这个问题,我猜这并不难)
- 创建一个 rest-api 用于与 keycloak 和您的 user-store 交互(此步骤是可选的,我这样做是因为我的 back-end 在 .Net 上并且我想要我的所有身份验证keycloak 中的逻辑)所以你可以为你的 2FA 生成秘密(OTP 私钥,SMS phone 号码,...)
- 创建自定义身份验证 class 并使用 OTP 表单读取数据(不用担心,您可以自定义它的标题和标签,也可以使用属性将其设为可选来自您的用户存储)
为此,我基本上必须下载 keycloak 的源代码并分析它如何使用密码和 OTP 在内部进行身份验证。
如果有人对此感兴趣,可以私信我
好吧,我之前的回答是错误的,我会把它留在那里只是因为它可能对其他人有用,所以,这里是关于如何做到这一点的完整历史...
我的外部数据库支持完整的 OTP
好吧,终于在一个多星期后(在我的新项目上)我用 Keycloak 18.0 完成了这个工作。您需要做什么?简单来说,您必须执行身份验证工作流程中的每一步:
- 创建您的用户存储 SPI
- 实施凭据更新 SPI
- 实施自定义凭据提供程序 SPI
- 实施自定义所需操作 SPI
- 实施您的身份验证器 SPI
- 实现你的表单(我有点用了 KC 中的内部 OTP 表单)
- 启用您需要的操作
- 创建浏览器工作流程的副本并在其中粘贴您的身份验证器
我们从中得到了什么?
- 我们得到一个完全可定制的 OTP 验证器(领域的政策待定...)
- 您可以在您的应用程序中使用该代码进行验证(它在您的数据库中),例如,用户已经通过身份验证,然后您想要验证 password/code 以确认某些操作
- 您可以在您的应用中为用户设置 OTP 身份验证(不涉及 KC 管理页面,因此,您可以将管理页面留在 firewall/proxy 之外)
在我看来,这有点烦人,因为我们必须做很多循环才能在本地存储我们的数据以及如何处理集成的 OTP 表单(为了“自然的外观”) ,但它让我可以完全控制我的 OTP 集成,而且,我可以备份我的数据库并且他们的 OTP 身份验证仍然存在,所以,如果我在 KC 升级中失败或它被损坏,我仍然拥有所有这些数据。
最后,这是当您的经理拥有自定义 OTP 身份验证时的样子