如何在Keycloak中添加基于OIDC CIBA的REST式替代身份提供商
Keycloak集成自定义CIBA风格REST API身份提供商方案
结论:需要自定义身份提供商实现
Keycloak官方没有现成适配你描述的这种非重定向、基于REST API轮询+推送确认的CIBA身份提供商,必须通过Keycloak的扩展机制自定义实现。
具体实现步骤
1. 编写自定义身份提供商核心逻辑
- 继承Keycloak的
AbstractIdentityProvider类(或实现IdentityProvider接口),封装与外部IdP的全流程交互:- 触发阶段:捕获用户选择该IdP的请求,调用外部API传入
UserId,获取随机数和transactionId - 等待阶段:在Keycloak认证页面渲染等待提示,同时发起对外部IdP状态查询API的轮询(可由前端或后端实现)
- 完成阶段:轮询到用户授权通过后,调用外部API获取令牌,将身份信息同步到Keycloak中完成认证
- 触发阶段:捕获用户选择该IdP的请求,调用外部API传入
- 实现
IdentityProviderFactory类,用于注册自定义IdP,让Keycloak管理控制台能识别并配置该提供商
2. 接入Keycloak认证流
- 在Keycloak的认证流中添加"身份提供商选择"步骤,将自定义IdP设为可选选项,与原有表单认证并列
- 配置认证流分支逻辑,确保只有用户主动选择该IdP时才触发自定义流程,完全不干扰默认的浏览器认证流程
3. 前端交互优化
- 用户选择该IdP后,前端展示等待授权的界面,同时处理轮询逻辑;也可以添加"已完成设备确认"按钮,让用户主动触发状态查询,减少不必要的轮询消耗
关键注意点
- 超时处理:在自定义逻辑中设置合理的超时时间,超时后引导用户返回认证选择页面或重试
- 安全保障:与外部IdP的所有API交互必须使用HTTPS,对请求和响应数据做签名验证,防止数据篡改
- 可配置性:通过
IdentityProviderFactory实现控制台配置界面,允许管理员设置外部IdP的API地址、超时时间等参数
内容的提问来源于stack exchange,提问作者Furqan Shaikh
相关产品推荐
相关产品推荐

