在 Keycloak 管理客户端 Node JS 中通过 'createdTimestamp' 获取用户

Get users by 'createdTimestamp' in Keycloak admin client Node JS

我正在尝试使用 Node.js

中的 Keycloak Admin Client 删除在特定时间之前创建的用户

我可以使用如下命令通过用户名、名字、姓氏获取用户:

const users = await keycloak.users.find({ username: 'rc' })

用户有一个 createdTimestamp 属性,但是当我试图通过它找到某人时,例如

const users = await keycloak.users.find({ createdTimestamp: 1640191005096 })

那么它只是 returns 所有用户。

用户看起来像这样:

{
    id: 'd0ff32e5-7604-4d07-8067-ded2d96a608d',
    createdTimestamp: 1640191005096,
    username: 'rc',
    enabled: true,
    totp: false,
    emailVerified: true,
    firstName: 'rocket',
    lastName: 'example',
    email: 'example@example.com',
    disableableCredentialTypes: [],
    requiredActions: [],
    notBefore: 0,
    access: {
      manageGroupMembership: true,
      view: true,
      mapRoles: true,
      impersonate: true,
      manage: true
    }
  }

很遗憾,这是不可能的

对应的keycloak api端点只允许搜索

  • 电子邮件
  • 用户名
  • 名字
  • 姓氏

https://www.keycloak.org/docs-api/15.0/rest-api/index.html#_getusers

您唯一可能的解决方案是在客户端为 createdTimestamp 加载所有用户和 filter/search。 但这在很大程度上取决于您所在领域的用户数量。如果有很多,这个解决方案可能 slow/not 性能对你来说已经足够了。

我为此使用的解决方法是找到所有帐户,然后通过执行 .createdTimestamp:

访问 createdTimestap
    const users = await keycloak.users.find()
    for (const [i, user] of users.entries()) {
      if (user.createdTimestamp < dateToTimestamp) {
        deletedUsers.push(user.username)
        deletedIDs.push(user.id)
        await keycloak.users.del({ id: user.id });
        console.info(`Account with username: ${deletedUsers[i]} and ID: ${deletedIDs[i]} has been deleted from Keycloak`)
      } 
    }

没有花费太多额外的努力。