Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a:
Tenant esterni (altre informazioni)
Questa esercitazione illustra come acquisire un token di accesso e chiamare un'API nell'app per dispositivi mobili Android. Microsoft Authentication Library (MSAL) native authentication SDK per Android consente di acquisire più token di accesso con un single sign-in. Questa funzionalità consente di acquisire uno o più token di accesso senza richiedere a un utente di ripetere l'autenticazione.
In questa esercitazione, farai:
- Acquisire uno o più token di accesso.
- Chiamare un'API
Prerequisiti
- Completare i passaggi descritti in Esercitazione: Aggiungere l'accesso utente all'app Android usando l'autenticazione nativa. Questa esercitazione illustra come accedere agli utenti nell'app Android usando l'autenticazione nativa.
Acquisire un token di accesso
Dopo l'accesso dell'utente, si acquisisce un token di accesso specificando gli ambiti per i quali il token di accesso è valido.
MSAL native authentication SDK supporta più token di accesso, quindi è possibile specificare più set di ambiti, quindi richiedere il token di accesso per ogni set di ambiti:
Dichiarare e impostare i valori per un set di ambiti API usando il frammento di codice seguente:
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>() }Eseguire l'accesso dell'utente utilizzando il seguente frammento di codice:
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 } }Acquisire uno o più token di accesso usando il frammento di codice seguente:
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 } } }Definire la funzione
getAccessToken()come illustrato nel codice seguente: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") } }
Chiamare un'API
Per effettuare una chiamata API, usare il token di accesso acquisito in Acquisire un token di accesso e un URL DELL'API:
Dichiarare e impostare i valori per gli URL dell'API usando il frammento di codice seguente:
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" }Sostituire:
-
Enter_URL_Of_First_Web_APIsegnaposto con il valore completo dell'URL della prima API. -
Enter_URL_Of_Second_Web_APIsegnaposto con il valore completo dell'URL della tua seconda API.
-
Usare i frammenti di codice seguenti per chiamare un'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) } }Definire la funzione
performGetApiRequest()come illustrato nel codice seguente: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 } } }
Configurare un provider di attestazioni personalizzato
Se vuoi aggiungere attestazioni da un sistema esterno al token rilasciato all'app, usa un provider di attestazioni personalizzato . Un provider di attestazioni personalizzato è costituito da un'estensione di autenticazione personalizzata che chiama un'API REST esterna per recuperare le attestazioni da sistemi esterni.
Seguire la procedura descritta in Configurare un provider di attestazioni personalizzato per aggiungere attestazioni da un sistema esterno ai token di sicurezza.