场景 ListSessions

以管理员用户身份使用用户名和密码登录,并列出 Realm 中的用户和客户端会话。

有关所有场景的列表,请参阅 场景概述

此场景的步骤

  1. 通过 API 使用管理员用户名和密码登录。

  2. 查找客户端并列出该客户端下的所有用户会话。

  3. 查找用户并列出该用户下的所有用户会话以及连接到它们客户端会话。

有关详细信息,请参阅 ListSessions.scala 中的源代码。

关于此场景的细节

这些场景使用主管理员帐户通过内置的 admin-cli 客户端执行 realm 操作。

此信息通过选项 --admin-username--admin-password 指定给场景。

服务帐户令牌的使用与这些场景无关,因为

  • 实际的列表会话操作是使用主 realm 的管理员凭据执行的

  • 由于令牌包含所有 realm 权限,它会增长非常快,并会很快超过标头的最大长度(导致 431 Request Header Fields Too Large 响应)。

要查看查找的工作原理,请参阅 KeycloakScenarioBuilder.scala 中的方法 getClientUUID 和 getUserUUID。

基本场景:单个用户和单个客户端

先决条件

  • Keycloak 正在运行。

  • Realm、用户和客户端存在,其值在 CLI 上列出。

  • 此场景不需要为客户端设置任何服务帐户角色。

运行场景

以下场景以默认设置运行 30 秒。

有关其他 CLI 选项,请参阅 配置基准测试

bin/kcb.sh \
--scenario=keycloak.scenario.admin.ListSessions \
--server-url=http://localhost:8080/ \
--measurement=30 \
--username=user-0 \
--client-id=client-0 \
--realm-name=test-realm \
--admin-username=admin \
--admin-password=admin \
--log-http-on-failure

变体:用户范围和客户端范围

先决条件

要列出来自不同数量的用户和客户端的会话,额外的先决条件是一组用户和客户端。

这可以使用指南的 生成数据集 部分创建。

这可以使用其 REST API 或 dataset-import.sh shell 脚本执行。

替代方案 1:使用 REST API 设置用户和客户端
curl 'https://keycloak-server/realms/master/dataset/create-realms?realm-name=realm-0&count=1&clients-per-realm=30&users-per-realm=200'
替代方案 2:使用 dataset-import.sh shell 脚本设置用户和客户端
./dataset-import.sh -a create-realms -r 1 -c 5 -u 30

运行场景

使用以下示例命令从给定范围缩放用户和客户端。

bin/kcb.sh \
--scenario=keycloak.scenario.admin.ListSessions \
--server-url=http://localhost:8080/ \
--measurement=30 \
--users-per-realm=30 \
--clients-per-realm=5 \
--admin-username=admin \
--admin-password=admin \
--log-http-on-failure

错误消息

用户名或密码无效

可以通过尝试在帐户控制台 https://{keyloak-server}/realms/{realm}/account/ 上以用户身份登录来手动测试。这可能有以下原因

  • 给定用户名的用户不存在。

    补救措施: 检查命令行上给出的用户或默认用户是否存在于给定的 realm 中。

  • 用户拥有不同的密码。

    补救措施: 检查用户是否设置了正确的密码。

  • --users-per-realm--clients-per-realm 提供的范围大于来自 生成数据集 模块的种子用户和客户端。

    补救措施: 检查 --users-per-realm--clients-per-realm 的范围是否小于可用的用户和客户端。

Realm 未找到

场景使用的 realm 不存在。这可能具有以下 realm

  • 命令行上指定的 realm 与 Keycloak 设置不匹配,或者如果 CLI 上指定了 realm 范围,则其中一个 realm 不存在。

    补救措施: 通过登录到 Keycloak 实例检查 CLI 是否与 Keycloak 配置匹配。

  • 没有使用 CLI 选项来指定 realm,因此场景使用不存在的 realm-0

    补救措施: 在 Keycloak 实例中创建 realm realm-0,或使用 CLI 选项来指定存在的 realm。