如何在Keycloak 18.0中获取用户的MFA密钥(非客户端密钥)
获取Keycloak 18.0中用户的MFA密钥(TOTP)
Keycloak默认会加密存储用户的TOTP密钥,无法直接通过管理控制台或常规API获取明文密钥。以下是两种可行的操作方式:
方法一:数据库查询加解密
- 定位Keycloak的数据库表:用户基础信息存在
user_entity表,凭证信息存在credential表 - 执行SQL筛选出TOTP类型的凭证记录:
SELECT u.username, c.value FROM user_entity u JOIN credential c ON u.id = c.user_id WHERE c.type = 'totp'; - 解密查询结果:上述
value字段是加密内容,需用Keycloak的加密密钥解密。该密钥可在Keycloak配置文件(如standalone.xml、keycloak.conf)的加密器配置中找到,或从keycloak数据库的component表中对应加密组件的配置项提取。
方法二:自定义Keycloak SPI扩展
- 开发自定义SPI扩展,利用Keycloak内部逻辑解密TOTP密钥,暴露一个可调用的接口
- 部署扩展后,通过Keycloak Admin API调用该自定义接口,批量获取用户的明文MFA密钥
- 注意:此方式需要具备Keycloak扩展开发能力,且必须严格控制接口权限,防止密钥泄露
关键注意事项
- 直接获取用户MFA密钥存在极高安全风险,可能违反数据隐私法规,操作前必须获得合法授权并遵循合规流程
- 若目的是恢复用户MFA功能,更安全合规的方式是在Keycloak管理控制台为用户重置MFA,让用户重新完成配置
内容的提问来源于stack exchange,提问作者Gustavo Guimarães
相关产品推荐
相关产品推荐

