Ktorクライアントでのダイジェスト認証
必要な依存関係: io.ktor:ktor-client-auth
コード例: client-auth-digest
ダイジェスト認証スキームでは、ユーザー名とパスワードをネットワーク経由で送信する前に、ハッシュ関数が適用されます。
サーバー側では、Ktorはダイジェスト認証を処理するためのAuthenticationプラグインを提供します。
ダイジェスト認証のフロー
ダイジェスト認証のフローは次のようになります。
クライアントは、サーバーアプリケーション内の特定のリソースに対して、
Authorization
ヘッダーなしでリクエストを行います。サーバーはクライアントに
401
(未承認) レスポンスステータスで応答し、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)
サーバーはクライアントによって送信された資格情報を検証し、要求されたコンテンツで応答します。
ダイジェスト認証の設定
ユーザーの資格情報をAuthorization
ヘッダーにDigest
スキームを使用して送信するには、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。