Ktor Client 中的摘要驗證
所需依賴項: 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)伺服器驗證用戶端傳送的憑證,並回應所請求的內容。
設定摘要驗證
要使用 Digest 方案在 Authorization 標頭中傳送使用者憑證,您需要按以下方式設定 digest 驗證提供者:
- 在
install區塊內呼叫 digest 函式。 - 使用 DigestAuthCredentials 提供所需的憑證,並將此物件傳遞給 credentials 函式。
- 選擇性地,使用
realm屬性設定領域。
kotlin
val client = HttpClient(CIO) {
install(Auth) {
digest {
credentials {
DigestAuthCredentials(username = "jetbrains", password = "foobar")
}
realm = "Access to the '/' path"
}
}
}您可以在這裡找到完整範例:client-auth-digest。
