Skip to content

KtorクライアントでのBasic認証

必要な依存関係: io.ktor:ktor-client-auth

コード例: client-auth-basic

Basic 認証スキームは、ユーザーのログインに使用できます。このスキームでは、ユーザーの資格情報は、Base64でエンコードされたユーザー名とパスワードのペアとして送信されます。

サーバー側では、KtorはBasic認証を処理するためのAuthenticationプラグインを提供します。

Basic認証のフロー

Basic認証のフローは次のようになります。

  1. クライアントは、サーバーアプリケーション内の特定のリソースに対して、Authorizationヘッダーなしでリクエストを送信します。

  2. サーバーは、クライアントに401 (Unauthorized) レスポンスステータスで応答し、WWW-Authenticateレスポンスヘッダーを使用して、Basic認証スキームがルートを保護するために使用されているという情報を提供します。典型的なWWW-Authenticateヘッダーは次のようになります。

    WWW-Authenticate: Basic realm="Access to the '/' path", charset="UTF-8"

    Ktorクライアントでは、sendWithoutRequest 関数を使用して、WWW-Authenticateヘッダーを待たずに資格情報を送信できます。

  3. 通常、クライアントはユーザーが資格情報を入力できるログインダイアログを表示します。その後、クライアントは、Base64でエンコードされたユーザー名とパスワードのペアを含むAuthorizationヘッダーでリクエストを送信します。例:

    Authorization: Basic amV0YnJhaW5zOmZvb2Jhcg
  4. サーバーはクライアントから送信された資格情報を検証し、要求されたコンテンツで応答します。

Basic認証を構成する

Basicスキームを使用してAuthorizationヘッダーにユーザーの資格情報を送信するには、basic認証プロバイダーを次のように構成する必要があります。

  1. installブロック内でbasic関数を呼び出します。

  2. BasicAuthCredentialsを使用して必要な資格情報を提供し、このオブジェクトをcredentials関数に渡します。

  3. realmプロパティを使用してレルムを構成します。

    kotlin
    val client = HttpClient(CIO) {
        install(Auth) {
            basic {
                credentials {
                    BasicAuthCredentials(username = "jetbrains", password = "foobar")
                }
                realm = "Access to the '/' path"
            }
        }
    }
  4. オプションで、WWW-Authenticateヘッダーを含む401 (Unauthorized) レスポンスを待たずに、初期リクエストで資格情報を送信するように有効にします。ブール値を返すsendWithoutRequest関数を呼び出し、リクエストパラメーターをチェックする必要があります。

    kotlin
    install(Auth) {
        basic {
            // ...
            sendWithoutRequest { request ->
                request.url.host == "0.0.0.0"
            }
        }
    }

完全な例はこちらで確認できます: client-auth-basic