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)
Dalam tutorial ini, Anda mempelajari cara memperoleh token akses dan memanggil API di aplikasi seluler Android Anda. SDK autentikasi asli Microsoft Authentication Library (MSAL) untuk Android memungkinkan Anda memperoleh beberapa token akses dengan satu masuk. Kemampuan ini memungkinkan Anda memperoleh satu atau beberapa token akses tanpa mengharuskan pengguna untuk mengautentikasi ulang.
Di tutorial ini, Anda akan:
- Memperoleh satu atau beberapa token akses.
- Memanggil sebuah API
Prasyarat
- Selesaikan langkah-langkah di Tutorial: Tambahkan masuk di aplikasi Android dengan autentikasi asli. Tutorial ini menunjukkan kepada Anda cara memasukkan pengguna di aplikasi Android Anda dengan menggunakan autentikasi asli.
Memperoleh token akses
Setelah pengguna masuk, Anda memperoleh token akses dengan menentukan cakupan yang token aksesnya valid.
SDK autentikasi asli MSAL mendukung beberapa token akses, sehingga Anda dapat menentukan beberapa set cakupan, lalu meminta token akses untuk setiap set cakupan:
Deklarasikan dan tetapkan nilai untuk sekumpulan cakupan API dengan menggunakan cuplikan kode berikut:
companion object { // Set values for respective API scopes for their web API resources here, for example: ["api://<Resource_App_ID>/ToDoList.Read", "api://<Resource_App_ID>/ToDoList.ReadWrite"] // A list of scope for API 1 private val scopesForAPI1 = listOf<String>() // A list of scope for API 2 private val scopesForAPI2 = listOf<String>() }Melakukan login pengguna dengan menggunakan cuplikan kode berikut:
CoroutineScope(Dispatchers.Main).launch { val parameters = NativeAuthSignInParameters(username = email) parameters.password = password val actionResult: SignInResult = authClient.signIn(parameters) if (actionResult is SignInResult.Complete) -> { // Perform operations after successful sign-in } else if (actionResult is SignInError) { // Handle sign-in errors } }Dapatkan satu atau beberapa token akses dengan menggunakan cuplikan kode berikut:
CoroutineScope(Dispatchers.Main).launch { val accountResult = authClient.getCurrentAccount() when (accountResult) { is GetAccountResult.AccountFound -> { try { // Access token for API 1 val accessTokenOne = getAccessToken(accountResult.resultValue, scopesForAPI1) // Access token for API 2 val accessTokenTwo = getAccessToken(accountResult.resultValue, scopesForAPI2) // Proceed to make a call to an API } catch (e: Exception) { // Handle Exception } } is GetAccountResult.NoAccountFound -> { // Handle etAccountResult.NoAccountFound } is GetAccountError -> { // Handle GetAccountError } } }Tentukan fungsi
getAccessToken()seperti yang ditunjukkan dalam kode berikut:private suspend fun getAccessToken(accountState: AccountState, scopes: List<String>): String { val parameters = NativeAuthGetAccessTokenParameters() parameters.scopes = scopes val accessTokenState = accountState.getAccessToken(parameters) return if (accessTokenState is GetAccessTokenResult.Complete) { accessTokenState.resultValue.accessToken } else { throw Exception("Failed to get access token") } }
Memanggil sebuah API
Untuk melakukan panggilan API, gunakan token akses yang Anda peroleh di Memperoleh token akses dan URL API:
Deklarasikan dan tetapkan nilai untuk URL API dengan menggunakan cuplikan kode berikut:
companion object { // Set values for respective API scopes for web API resources here, for example: ["api://<Resource_App_ID>/ToDoList.Read", "api://<Resource_App_ID>/ToDoList.ReadWrite"] // A list of scope for API 1 private val scopesForAPI1 = listOf<String>() // A list of scope for API 2 private val scopesForAPI2 = listOf<String>() // Set the URL of first web API resource here private const val WEB_API_URL_1 = "Enter_URL_Of_First_Web_API" // Set the URL of second web API resource here private const val WEB_API_URL_2 = "Enter_URL_Of_Second_Web_API" }Ganti:
-
Enter_URL_Of_First_Web_APIplaceholder dengan nilai URL lengkap dari API pertama Anda. -
Enter_URL_Of_Second_Web_APItempat penampung dengan nilai URL lengkap API kedua Anda.
-
Gunakan cuplikan kode berikut untuk memanggil API:
// After you acquire an access token, use it to call an API val firstApiResponse = useAccessToken(WEB_API_URL_1, accessTokenOne) val secondApiResponse = useAccessToken(WEB_API_URL_2, accessTokenTwo) private suspend fun useAccessToken(WEB_API_URL: String, accessToken: String): Response { return withContext(Dispatchers.IO) { ApiClient.performGetApiRequest(WEB_API_URL, accessToken) } }Tentukan fungsi
performGetApiRequest()seperti yang ditunjukkan dalam kode berikut:object ApiClient { private val client = OkHttpClient() fun performGetApiRequest(WEB_API_URL: String, accessToken: String): Response { val requestBuilder = Request.Builder() .url(WEB_API_URL) .addHeader("Authorization", "Bearer $accessToken") .get() val request = requestBuilder.build() client.newCall(request).execute().use { response -> return response } } }
Mengonfigurasi penyedia klaim kustom
Jika Anda ingin menambahkan klaim dari sistem eksternal ke dalam token yang dikeluarkan untuk aplikasi Anda, gunakan penyedia klaim kustom . Penyedia klaim kustom terdiri dari ekstensi autentikasi kustom yang memanggil REST API eksternal untuk mengambil klaim dari sistem eksternal.
Ikuti langkah-langkah dalam Mengonfigurasi penyedia klaim kustom untuk menambahkan klaim dari sistem eksternal ke token keamanan Anda.