Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk:
Penyewa eksternal (pelajari selengkapnya)
Tutorial ini menunjukkan cara melampirkan header x-* kustom ke permintaan jaringan autentikasi asli di aplikasi Android (Kotlin) Anda menggunakan antarmuka Pustaka Autentikasi Microsoft (MSAL) NativeAuthRequestInterceptor, memungkinkan integrasi dengan SDK penipuan dan deteksi bot pihak ketiga.
Di tutorial ini, Anda akan:
- Pahami aturan penamaan header yang diberlakukan oleh MSAL.
- Implementasikan
NativeAuthRequestInterceptorantarmuka. - Daftarkan pencegat dengan konfigurasi aplikasi Anda.
Prasyarat
- Aplikasi Android (Kotlin) yang menggunakan autentikasi asli MSAL. Jika Anda tidak memilikinya, selesaikan Tutorial: Tambahkan masuk di aplikasi Android (Kotlin) menggunakan autentikasi asli.
- Aplikasi Anda diinisialisasi dengan
INativeAuthPublicClientApplicationinstance. Langkah-langkah dalam tutorial ini menunjukkan kepada Anda cara memperbarui kode inisialisasi aplikasi yang ada untuk mendaftarkan pencegat.
Memahami aturan penamaan header
MSAL menerapkan aturan berikut saat mengevaluasi header yang Anda berikan:
- Header harus dimulai dengan
x-(tidak peka huruf besar/kecil). Header yang tidak dimulaix-diabaikan. - Header yang dimulai dengan salah satu awalan cadangan berikut diabaikan:
x-client-x-ms-x-broker-x-app-
- Header yang valid dinormalisasi ke huruf kecil sebelum ditambahkan ke permintaan.
- MSAL menambahkan header yang memenuhi kedua aturan ke permintaan jaringan. Jika header yang Anda berikan memiliki nama yang sama dengan salah satu header internal MSAL sendiri, nilai Anda lebih diutamakan.
Gunakan aturan ini untuk memverifikasi nama header yang disyaratkan oleh vendor Anda sebelum mengimplementasikan interceptor.
Menerapkan penyaring permintaan
Antarmuka NativeAuthRequestInterceptor mendeklarasikan satu metode yang dipanggil MSAL secara sinkron sebelum mengirim setiap permintaan jaringan. Implementasi Anda menerima URL permintaan dan mengembalikan peta header untuk ditambahkan, atau null jika tidak ada header yang diperlukan untuk permintaan tersebut.
Important
Metode ini additionalHeaders dijalankan secara sinkron pada utas yang melakukan permintaan (biasanya latar belakang/utas jaringan). Implementasi harus aman utas dan kembali dengan cepat. Setiap pengecualian yang dihasilkan dari metode ini diteruskan ke pemanggil dan menyebabkan permintaan gagal.
Buat kelas yang mengimplementasikan NativeAuthRequestInterceptor:
import com.microsoft.identity.common.java.nativeauth.providers.NativeAuthRequestInterceptor
import java.net.URL
class CustomHeaderInterceptor : NativeAuthRequestInterceptor {
override fun additionalHeaders(requestUrl: URL): Map<String, String>? {
// Scope headers to specific endpoints only.
if (requestUrl.path.contains("oauth2/v2.0/initiate")) {
return mapOf(
"value_1" to "customer_header_1", // Ignored: doesn't start with "x-"
"x-client-header" to "customer_header_2", // Ignored: starts with reserved prefix "x-client-"
"X-my-custom-header" to "my data" // Added to the network request (lowercased to "x-my-custom-header").
)
}
// Return null for all other requests to avoid over-sending signals.
return null
}
}
Metode ini menerima URL lengkap permintaan keluar di requestUrl. Gunakan URL ini untuk membatasi header Anda ke endpoint tertentu yang diperlukan oleh vendor deteksi penipuan atau bot, seperti endpoint untuk memulai proses masuk atau pendaftaran. Mengirim header ke titik akhir yang tidak terkait dapat menurunkan kualitas sinyal dan meningkatkan positif palsu.
Note
Selalu kembalikan nilai dari additionalHeaders. Mengembalikan null atau peta kosong jika tidak ada header tambahan yang diperlukan untuk permintaan tersebut.
Daftarkan pencegat
Setelah menerapkan antarmuka, atur requestInterceptor properti di aplikasi NativeAuthPublicClientApplicationConfigurationAnda. Jika aplikasi Anda menginisialisasi klien autentikasi dengan file konfigurasi JSON (seperti app/src/main/res/raw/native_auth_sample_app_config.json), atur pencegat pada konfigurasi setelah membuat klien:
import com.microsoft.identity.client.PublicClientApplication
import com.microsoft.identity.nativeauth.INativeAuthPublicClientApplication
import com.microsoft.identity.nativeauth.NativeAuthPublicClientApplicationConfiguration
val authClient: INativeAuthPublicClientApplication =
PublicClientApplication.createNativeAuthPublicClientApplication(
context,
R.raw.native_auth_sample_app_config
)
(authClient as? PublicClientApplication)?.let { app ->
(app.configuration as? NativeAuthPublicClientApplicationConfiguration)?.requestInterceptor =
CustomHeaderInterceptor()
}
Jika aplikasi Anda menggunakan konfigurasi terprogram, atur properti requestInterceptor pada instance NativeAuthPublicClientApplicationParameters Anda sebelum membuat aplikasi:
import com.microsoft.identity.client.PublicClientApplication
import com.microsoft.identity.nativeauth.INativeAuthPublicClientApplication
import com.microsoft.identity.nativeauth.NativeAuthPublicClientApplicationParameters
val parameters = NativeAuthPublicClientApplicationParameters(
clientId = "Enter_the_Application_Id_Here",
authorityUrl = "https://Enter_the_Tenant_Subdomain_Here.ciamlogin.com/Enter_the_Tenant_Subdomain_Here.onmicrosoft.com/",
challengeTypes = listOf("oob", "password")
)
parameters.requestInterceptor = CustomHeaderInterceptor()
val authClient: INativeAuthPublicClientApplication =
PublicClientApplication.createNativeAuthPublicClientApplication(
context,
parameters
)
Pastikan apakah header sudah diterapkan
Untuk mengonfirmasi bahwa header Anda mencapai titik akhir yang dimaksudkan, periksa lalu lintas jaringan keluar menggunakan alat proksi jaringan seperti Charles Proxy atau Android Studio Network Inspector. Periksa apakah:
- Header yang dimulai dengan
x-dan tanpa awalan yang dicadangkan muncul dalam permintaan HTTP. - Header dengan awalan yang dipesan (
x-client-,x-ms-,x-broker-,x-app-) tidak muncul dalam permintaan. - Header dikirim hanya ke titik akhir yang Anda cakup.
- Nama header yang valid ditulis dalam huruf kecil dalam permintaan yang dikirim.
Note
Pencatatan log di dalam interceptor tidak akan menampilkan header akhir permintaan. Interceptor dipanggil sebelum MSAL mengevaluasi dan menerapkan aturan penamaan, sehingga hanya mencerminkan header yang Anda sediakan, bukan yang pada akhirnya dikirim.