场景 AuthorizationCode
使用用户名和密码登录用户并交换身份验证代码。
查看 场景概述 以获取所有场景的列表。
场景步骤
-
打开登录页面。
-
使用用户名和密码登录。
-
将身份验证代码交换为令牌。
-
使用 给定概率 注销。
查看源代码,位于 AuthorizationCode.scala,了解详细信息。
由于问题 #945 中描述的情况,此场景不适用于非 TLS 本地主机 URL,例如 |
运行示例场景
先决条件
-
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 参数中列出了未知的范围。
检查客户端的“客户端范围”选项卡中是否存在所有范围,无论是作为默认范围还是可选范围。作为参数给出的范围可能不存在,或者存在拼写错误。