Gửi một yêu cầu HTTP với xác thực cơ bản

Kotlin:
Gửi một yêu cầu HTTP với xác thực cơ bản

Cách thực hiện:

Kotlin xử lý yêu cầu HTTP với các thư viện như ktor hoặc okhttp. Chúng ta sẽ sử dụng okhttp cho bây giờ.

Trước tiên, thêm thư viện vào build.gradle của bạn:

dependencies {
    implementation("com.squareup.okhttp3:okhttp:4.9.0")
}

Đến lúc viết mã:

import okhttp3.Credentials
import okhttp3.OkHttpClient
import okhttp3.Request
import java.io.IOException

fun main() {
    val client = OkHttpClient()

    val username = "admin"
    val password = "password123"
    val credentials = Credentials.basic(username, password)

    val request = Request.Builder()
        .url("http://example.com/resource")
        .header("Authorization", credentials)
        .build()

    client.newCall(request).execute().use { response ->
        if (!response.isSuccessful) throw IOException("Mã không mong đợi $response")

        println(response.body!!.string())
    }
}

Chạy và xem kết quả trên console. Bạn sẽ thấy tài nguyên được bảo vệ hiện ra.

Nâng cao

Ngày xưa, HTTP Basic Auth là lựa chọn hàng đầu. Đơn giản: chỉ cần mã hóa base64 username:password và đặt nó vào header. Không an toàn nếu dùng một mình, do đó HTTPS đã được thêm vào.

Có phương án thay thế không? Rất nhiều. OAuth cho token, API keys cho sự đơn giản, hoặc xác thực digest cho một nâng cấp. Xác thực cơ bản tốt để bắt đầu hoặc cho các công cụ nội bộ, nhưng không phải cho web hiện đại, đề cao an ninh.

Chi tiết thực hiện: Đừng tự chế lại bánh xe. Các thư viện xử lý mã hóa và nắm bắt các sắc thái của giao thức. OkHttp thậm chí còn đối phó với các lần thử lại và kết nối cho bạn. Nhớ rằng, xác thực cơ bản qua HTTP là không nên - luôn sử dụng HTTPS để giữ an toàn cho thông tin xác thực khi chuyển tiếp.

Xem thêm