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

KEYCLOAK自定义用户存储SPI下只读联邦用户OTP 2FA实现方案咨询

Keycloak只读联邦用户无本地缓存实现OTP双因素认证方案

以下是不需要将用户同步到Keycloak本地存储的可行实现方案:

方案1:自定义OTP认证执行器+外部存储OTP密钥

该方案完全不依赖Keycloak本地的用户存储写入能力,所有OTP相关数据落地到你已对接的SQL Server中:

  • 第一步:扩展现有自定义用户存储的UserAdapter实现,新增OTP相关属性映射:
    新增otp_secret、otp_enabled、otp_algorithm、otp_digits、otp_period字段的读写逻辑,读取直接从SQL Server拉取,写入直接更新SQL Server对应记录,无需调用Keycloak本地存储的更新接口
  • 第二步:自定义Authenticator SPI替换默认OTP认证逻辑:
    继承AbstractOTPFormAuthenticator类,重写两个核心方法:
    1. getOtpCredential:不再从Keycloak默认的CredentialManager读取本地存储的OTP配置,改为直接从你扩展的UserAdapter中拉取SQL Server里存的OTP属性
    2. OTP绑定逻辑:用户首次扫码绑定OTP时,生成的密钥直接写入SQL Server对应用户记录,不需要调用Keycloak的凭证存储接口写入本地
  • 第三步:调整认证流配置
    进入Keycloak对应Realm的「认证」页面,复制默认的浏览器认证流,将原有默认的「OTP表单」执行器替换为你自定义的OTP认证器,设置为必填后绑定到对应客户端或全局生效

方案2:无状态Cookie绑定方案(轻量场景适用)

如果不需要持久化保存用户的OTP配置,该方案完全不需要任何服务端写入操作:

  • 自定义认证执行器在用户密码校验通过后,生成临时OTP密钥返回前端供用户扫码绑定,同时将AES加密后的OTP密钥写入客户端HttpOnly类型Cookie,有效期和用户会话绑定
  • 用户后续提交OTP校验码时,服务端直接从Cookie中解密获取密钥做校验,无需读写任何服务端存储
  • 注意:该方案仅适合会话时长较短、安全要求中等的场景,Cookie需配置Secure、HttpOnly、SameSite=Strict属性避免密钥泄露

注意事项

Keycloak 18+版本部署自定义Authenticator SPI时,需要在SPI包的jboss-deployment-structure.xml中显式引入org.keycloak.keycloak-services依赖,否则会出现类找不到的报错
你可以直接重写自定义用户存储SPI的updateCredential方法,对接SQL Server的写入逻辑,该操作不会触发Keycloak本地的用户数据同步写入


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 06:48:04