场景 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://127.0.0.1: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://127.0.0.1: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 与 Keycloak 设置不匹配,或者如果在 CLI 上指定了 Realm 范围,则其中一个 Realm 不存在。

    解决方法: 通过登录 Keycloak 实例检查 CLI 是否与 Keycloak 配置匹配。

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

    解决方法: 在 Keycloak 实例中创建 Realm realm-0,或使用 CLI 选项指定存在的 Realm。

进一步阅读