如何在Keycloak Admin Client创建用户时移除Configure OTP必填操作
问题原因
这是因为你的Keycloak Realm配置了默认必填操作,强制要求所有新用户完成Configure OTP。即使你在代码里指定了两个必填项,Realm的默认设置会自动追加这个操作到新用户身上。
解决方案
1. 修改Realm的默认必填操作设置(全局生效)
进入Keycloak管理控制台:
- 切换到目标Realm,点击左侧菜单的Authentication -> Required Actions
- 在默认的Required Actions列表里,找到Configure OTP,取消勾选它的Default Action选项
- 保存设置后,新创建的用户就只会带上你代码里指定的两个必填操作了
2. 代码层面强制覆盖(单个用户生效)
如果不想修改全局Realm设置,只想让当前创建的用户不受默认OTP要求影响,可以用以下两种方式处理:
方式一:创建时明确覆盖(推荐)
部分Keycloak版本中,setRequiredActions会直接替换默认操作列表,若遇到默认项被追加的情况,可先清空再设置:
// 先清空默认的必填操作集合,再设置自定义项 userRepresentation.setRequiredActions(new ArrayList<>()); userRepresentation.setRequiredActions( List.of( UserModel.RequiredAction.VERIFY_EMAIL.name(), UserModel.RequiredAction.UPDATE_PASSWORD.name() ));
方式二:创建后移除多余操作
如果创建用户后仍存在额外的Configure OTP操作,可调用API手动移除:
String userId = CreatedResponseUtil.getCreatedId(response); if (userId != null) { UserRepresentation createdUser = keycloak.realm(this.realm).users().get(userId).toRepresentation(); List<String> requiredActions = new ArrayList<>(createdUser.getRequiredActions()); // 移除Configure OTP对应的枚举值 requiredActions.remove(UserModel.RequiredAction.CONFIGURE_TOTP.name()); createdUser.setRequiredActions(requiredActions); // 更新用户信息 keycloak.realm(this.realm).users().get(userId).update(createdUser); }
内容的提问来源于stack exchange,提问作者galalem
相关产品推荐
相关产品推荐

