场景 AuthorizationCode
使用用户名和密码登录用户并交换身份验证代码。
有关所有场景的列表,请参阅 场景概览。
场景步骤
-
打开登录页面。
-
使用用户名和密码登录。
-
交换身份验证代码以获取令牌。
-
以给定的概率注销。
有关详细信息,请参阅 AuthorizationCode.scala 中的源代码。
由于 issue #945 中描述的情况,此场景不适用于非 TLS localhost URL,例如 |
运行示例场景
先决条件
-
Keycloak 正在运行。
-
Realm、用户和客户端存在,其值在 CLI 上列出。
-
客户端需要启用客户端身份验证,这将导致 OIDC 类型的机密访问类型,因为机密客户端密钥用于授权码交换。
-
此场景不需要为客户端设置任何服务帐户角色。
有关如何为 realm 和客户端自动执行此操作的详细信息,请参阅 准备 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 的客户端在给定 realm 中不存在或已被错误输入。
补救措施: 检查在命令行上给出的或作为默认值的客户端 ID 是否存在于给定的 realm 中。
-
重定向 URI 与客户端中配置的重定向 URI 不匹配。
补救措施: 检查在命令行上给出的或作为默认值的重定向 URI 是否与客户端中的重定向 URI 匹配。
-
- 无效的用户名或密码
-
可以通过尝试在 https://{keyloak-server}/realms/{realm}/account/ 的帐户控制台上以用户身份登录来手动测试。 这可能有以下原因
-
具有给定用户名的用户不存在。
补救措施: 检查在命令行上给出的或作为默认值的用户是否存在于给定的 realm 中。
-
用户拥有不同的密码。
补救措施: 检查用户是否设置了正确的密码。
-
- scope 的参数值无效
-
scope 参数中列出了一个未知的 scope。
检查客户端的所有 scope 是否在客户端的“客户端 scopes”选项卡中作为默认 scope 或可选 scope 存在。 作为参数给出的 scope 可能不存在或存在拼写错误。