Ktor Client におけるダイジェスト認証
必要な依存関係: io.ktor:ktor-client-auth
コード例: client-auth-digest
ダイジェスト認証(Digest authentication)スキームでは、ユーザー名とパスワードをネットワーク経由で送信する前にハッシュ関数が適用されます。
サーバー側では、Ktor はダイジェスト認証を処理するための Authentication プラグインを提供しています。
undefined
ダイジェスト認証のフロー
ダイジェスト認証のフローは以下の通りです。
クライアントは、
Authorizationヘッダーを付けずに、サーバーアプリケーションの特定のリソースに対してリクエストを送信します。サーバーは、
401(Unauthorized) レスポンスステータスをクライアントに返し、WWW-Authenticateレスポンスヘッダーを使用して、そのルートの保護にダイジェスト認証スキームが使用されていることを通知します。典型的なWWW-Authenticateヘッダーは以下のようになります。WWW-Authenticate: Digest realm="Access to the '/' path", nonce="e4549c0548886bc2", algorithm="MD5"通常、クライアントはユーザーが認証情報を入力できるログインダイアログを表示します。その後、クライアントは以下の
Authorizationヘッダーを付けてリクエストを送信します。Authorization: Digest username="jetbrains", realm="Access to the '/' path", nonce="e4549c0548886bc2", uri="/", algorithm=MD5, response="6299988bb4f05c0d8ad44295873858cf"responseの値は、次のように生成されます。a.
HA1 = MD5(username:realm:password)b.
HA2 = MD5(method:digestURI)c.
response = MD5(HA1:nonce:HA2)サーバーはクライアントから送信された認証情報を検証し、要求されたコンテンツを返します。
ダイジェスト認証の設定
Digest スキームを使用して Authorization ヘッダーでユーザー認証情報を送信するには、次のように digest 認証プロバイダーを設定する必要があります。
installブロック内で digest 関数を呼び出します。- DigestAuthCredentials を使用して必要な認証情報を指定し、このオブジェクトを credentials 関数に渡します。
- 必要に応じて、
realmプロパティを使用して領域(realm)を設定します。
val client = HttpClient(CIO) {
install(Auth) {
digest {
credentials {
DigestAuthCredentials(username = "jetbrains", password = "foobar")
}
realm = "Access to the '/' path"
}
}
}完全な例はこちらにあります: client-auth-digest。
