如何通过Keycloak 24.0.5 REST API自动将管理员领域的TOTP执行设置为REQUIRED?
如何通过Keycloak 24.0.5 REST API自动将管理员领域的TOTP执行设置为REQUIRED?
我之前用Testcontainers做集成测试的时候,刚好需要自动配置Keycloak 24.0.5的管理员领域强制TOTP,完全懂你不想每次手动点GUI的痛苦!下面是我亲测有效的步骤,全程用REST API搞定:
第一步:获取管理员API访问令牌
首先得拿到Keycloak的管理员权限令牌,才能调用后台管理接口。你可以用curl或者测试代码里的HTTP客户端(比如Node.js的axios)发送POST请求到令牌端点:
curl -X POST \ http://<你的Keycloak容器地址>:<端口>/realms/master/protocol/openid-connect/token \ -H 'Content-Type: application/x-www-form-urlencoded' \ -d 'grant_type=password&client_id=admin-cli&username=admin&password=<你的管理员密码>'
把命令里的占位符换成你实际的容器地址、端口和管理员密码就行,返回结果里的access_token就是我们接下来要用到的认证令牌。
第二步:强制管理员领域用户配置TOTP
接下来要更新master领域的设置,把配置TOTP设为所有用户(包括管理员)登录时的强制要求。发送一个PATCH请求到master领域的管理接口:
curl -X PATCH \ http://<你的Keycloak容器地址>:<端口>/admin/realms/master \ -H 'Authorization: Bearer <刚才拿到的access_token>' \ -H 'Content-Type: application/json' \ -d '{ "requiredActions": [ { "alias": "CONFIGURE_TOTP", "enabled": true, "defaultAction": true, "priority": 10 } ] }'
这个请求会把CONFIGURE_TOTP这个动作设为启用且默认强制——简单说就是,任何用户(包括admin账号)下次登录时,系统会直接跳转到TOTP配置页面,不完成配置就没法进入后台。
第三步:可选——强制已配置用户登录时必须验证TOTP
如果希望已经配置过TOTP的管理员登录时,必须完成TOTP验证才能进入,那还得修改认证流程,把TOTP验证步骤设为REQUIRED:
- 先获取
browser认证流程的ID,发送GET请求:
curl -X GET \ http://<你的Keycloak容器地址>:<端口>/admin/realms/master/authentication/flows \ -H 'Authorization: Bearer <access_token>'
在返回的JSON结果里找到alias为browser的流程,记下它的id。
- 接着找到该流程下TOTP验证步骤的ID,发送GET请求:
curl -X GET \ http://<你的Keycloak容器地址>:<端口>/admin/realms/master/authentication/flows/<browser-flow-id>/executions \ -H 'Authorization: Bearer <access_token>'
找到providerId为auth-otp-form的执行步骤,记下它的id。
- 最后更新这个步骤的要求为
REQUIRED:
curl -X PUT \ http://<你的Keycloak容器地址>:<端口>/admin/realms/master/authentication/executions/<execution-id> \ -H 'Authorization: Bearer <access_token>' \ -H 'Content-Type: application/json' \ -d '{ "requirement": "REQUIRED" }'
这样一套操作下来,管理员领域的TOTP强制要求就全部配置好了,完全不需要手动操作GUI,刚好适配你用Testcontainers做集成测试的场景!
内容来源于stack exchange
相关产品推荐
相关产品推荐

