シナリオ AuthorizationCode

ユーザー名とパスワードでユーザーをログインさせ、認証コードを交換します。

すべてのシナリオの一覧については、シナリオの概要を参照してください。

シナリオのステップ

  1. ログインページを開きます。

  2. ユーザー名とパスワードでログインします。

  3. 認証コードをトークンと交換します。

  4. 指定された確率でログアウトします。

詳細については、AuthorizationCode.scala のソースコードを参照してください。

#945 で説明されている状況により、このシナリオは https://http://127.0.0.1 などの非 TLS localhost 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

バリアント

オフラインセッションを作成するには、パラメータ --scopeoffline_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 パラメータに不明なスコープがリストされています。

クライアントの クライアントスコープ タブに、すべてのスコープがデフォルトまたはオプションのスコープとして存在することを確認してください。パラメータとして指定されたスコープが存在しないか、タイプミスがある可能性があります。