You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Keycloak 3.4.3同Realm下为高风险资源配置双因素认证

在Keycloak 3.4.3中为特定资源配置双因素认证(2FA)

Great question! Since Keycloak 3.4.3 doesn’t offer a direct out-of-the-box option to target specific resources for 2FA, we can combine custom authentication flows, client configurations, and authorization policies to make this work—perfect for your use case where you want to keep SMS 2FA alongside Keycloak’s native OTP. Here’s a step-by-step breakdown tailored to your setup:

1. 构建支持双选项的2FA认证流

首先,我们要创建一个自定义认证流,让用户在完成用户名密码登录后,可以选择使用你改造的SMS认证器或原生OTP来完成2FA:

  • 登录Keycloak管理控制台,切换到目标Realm。
  • 进入Authentication > Flows页面。
  • 复制默认的browser流(或新建一个自定义流),命名为browser-dual-2fa。
  • 在新流的Forms阶段之后,添加一个Conditional Subflow(条件子流),命名为Dual 2FA Choices。
  • 在这个子流中添加两个执行器:
    • 你改造后的SMS认证器(确保它已经部署到Keycloak并配置好SNS相关参数)
    • Keycloak内置的OTP Form认证器
  • 将子流的触发规则设置为Alternative(即用户二选一完成认证),并将子流的整体要求设为REQUIRED——这保证用户在初始登录后必须完成2FA步骤。

2. 将认证流关联到目标资源所属的客户端

如果你的高风险资源属于某个特定客户端(比如API客户端或Web应用客户端),可以直接将我们的自定义流绑定到该客户端:

  • 进入Clients页面,选择与目标资源关联的客户端。
  • 切换到Settings标签页,找到Authentication Flow Overrides(认证流覆盖)区域。
  • 将Browser Flow设置为我们新建的browser-dual-2fa流,然后保存配置。

3. 针对特定资源的细粒度控制(可选)

如果需要仅对部分资源触发2FA(而非整个客户端),可以借助Keycloak 3.4.3已支持的Authorization Services:

  • 首先,在目标客户端的Settings标签页中勾选Authorization Enabled,开启授权功能。
  • 进入Clients > [目标客户端] > Authorization > Resources,创建或定位到需要保护的特定资源。
  • 进入Policies页面,新建一个Authentication Policy(认证策略),配置为需要通过我们的双选项2FA流。
  • 将该策略关联到目标资源的权限:进入Permissions页面,为目标资源新建一个权限,并绑定刚才创建的认证策略。这样就能确保只有完成2FA的用户才能访问该资源。

4. 测试验证配置

  • 使用普通用户账号访问目标资源,验证在用户名密码登录后,是否出现SMS和OTP的选择界面。
  • 分别测试两种认证方式,确认都能正常完成认证并访问资源。
  • 测试未完成2FA的用户是否被拦截,无法访问目标资源。

额外注意事项

  • 确保你改造的SMS认证器JAR包已正确部署到Keycloak的providers目录下,并且重启过Keycloak,这样它才能在认证流选项中显示。
  • Keycloak 3.4.3版本相对老旧,如果遇到UI中找不到对应选项的情况,可以尝试导出Realm的JSON配置,手动调整流设置后再重新导入。
  • 在提交合并请求前,建议在测试环境充分验证两种认证方式的兼容性,避免出现冲突。

内容的提问来源于stack exchange,提问作者Malys

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:22:08