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

Keycloak如何获取所有未设置密码的用户列表

Keycloak获取未设置密码用户列表的实现方案

Keycloak原生提供对应能力,完全可以实现你需要的筛选逻辑,不需要自行扩展底层存储查询。

  • 你预期的isPasswordSet()判断逻辑没有直接同名方法,可通过凭证管理器的内置方法实现等价判断:调用UserModel的credentialManager()获取凭证管理实例后,用isConfiguredFor(PasswordCredentialModel.TYPE)方法判断用户是否配置过密码类型的凭证,返回false即代表用户未设置密码。
  • 该判断逻辑和Keycloak Web管理控制台的用户密码状态展示规则完全一致,和管理页展示的无密码用户状态判定标准对齐。

可直接参考如下实现代码:

import org.keycloak.models.UserModel;
import org.keycloak.models.credential.PasswordCredentialModel;
import java.util.stream.Stream;

Stream<UserModel> unpasswordedUsers = session.users()
        .getUsersStream(session.getContext().getRealm())
        .filter(user -> !user.credentialManager().isConfiguredFor(PasswordCredentialModel.TYPE));
// 后续追加你的业务处理逻辑

注意事项

  • 不要混淆「未设置密码」和「需要重置密码」两个状态:后者是用户设置过密码但被标记为下次登录必须重置,和你要筛选的无密码用户是完全独立的状态,用isConfiguredFor判断不会出现这类误判。
  • 版本兼容说明:Keycloak 18及以上版本可直接使用上述isConfiguredFor方法;17及更早的旧版本没有该方法,可替换为user.credentialManager().getStoredCredentialsByTypeStream(PasswordCredentialModel.TYPE).findAny().isEmpty()实现相同判断。
  • 性能提示:如果当前Realm用户规模较大,全量遍历用户流做内存过滤会产生较高性能开销,生产环境可自定义用户存储索引做前置筛选,避免全表扫描。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 08:09:20