场景 AuthorizationCode

使用用户名和密码登录用户并交换身份验证代码。

查看 场景概述 以获取所有场景的列表。

场景步骤

  1. 打开登录页面。

  2. 使用用户名和密码登录。

  3. 将身份验证代码交换为令牌。

  4. 使用 给定概率 注销。

查看源代码,位于 AuthorizationCode.scala,了解详细信息。

由于问题 #945 中描述的情况,此场景不适用于非 TLS 本地主机 URL,例如 http://127.0.0.1http://127.0.0.1 或类似 URL。请改用其他接口的 IP 地址或 http://0.0.0.0,或使用 TLS 证书运行 Keycloak。

运行示例场景

先决条件

  • Keycloak 正在运行。

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

  • 客户端需要启用客户端身份验证,这将导致 OIDC 类型的机密访问类型,因为机密客户端密钥用于身份验证代码交换。

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

查看 准备 Keycloak 进行测试,了解如何为区域和客户端自动执行此操作的详细信息。

运行场景

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

查看 配置基准测试,了解其他 CLI 选项。

bin/kcb.sh \
  --scenario=keycloak.scenario.authentication.AuthorizationCode \
  --server-url=http://0.0.0.0:8080/ \
  --realm-name=realm-0 \
  --username=user-0 \
  --user-password=user-0-password \
  --client-id=client-0 \
  --client-secret=client-0-secret \
  --client-redirect-uri=http://0.0.0.0:8080 \
  --log-http-on-failure

变体

要创建脱机会话,请将参数 --scope 设置为包含 offline_access 的值,例如 openid profile offline_access

要测试在身份验证和注销之间重复刷新令牌,请传递 --refresh-token-count=<count>--refresh-token-period=<seconds>。默认情况下,它将关闭 HTTP 连接,以便下一个请求需要建立新的连接,模拟客户端的行为,在该客户端中,令牌刷新通常在与 Keycloak 的先前连接已过期后发生。通过添加选项 --refresh-close-http-connection=false 更改此行为。

错误信息

无效参数:redirect_uri

这可能是以下原因造成的

  • 具有给定客户端 ID 的客户端在给定区域中不存在或输入错误。

    解决方法:检查命令行或默认情况下给定的客户端 ID 是否存在于给定区域中。

  • 重定向 URI 与客户端中配置的重定向 URI 不匹配。

    解决方法:检查命令行或默认情况下给定的重定向 URI 是否与客户端中的重定向 URI 匹配。

无效用户名或密码

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

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

    解决方法:检查命令行或默认情况下给定的用户是否在给定区域中存在。

  • 用户具有不同的密码。

    解决方法:检查用户是否设置了正确的密码。

scope 的无效参数值

scope 参数中列出了未知的范围。

检查客户端的“客户端范围”选项卡中是否存在所有范围,无论是作为默认范围还是可选范围。作为参数给出的范围可能不存在,或者存在拼写错误。

进一步阅读