Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für:
Externe Mandanten (weitere Informationen)
In diesem Lernprogramm erfahren Sie, wie Sie ein Zugriffstoken erwerben und eine API in Ihrer mobilen Android-App aufrufen. Mit dem systemeigenen MSAL-Authentifizierungs-SDK (Microsoft Authentication Library, MSAL) für Android können Sie mehrere Zugriffstoken mit einer einzigen Anmeldung abrufen. Mit dieser Funktion können Sie einzelne oder mehrere Zugriffstoken abrufen, ohne dass Benutzer:innen erneut authentifiziert werden müssen.
In diesem Tutorial führen Sie Folgendes durch:
- Abrufen eines oder mehrerer Zugriffstoken.
- Aufrufen einer API
Voraussetzungen
- Führen Sie die Schritte im Lernprogramm aus: Hinzufügen der Anmeldung in der Android-App mithilfe der systemeigenen Authentifizierung. In diesem Lernprogramm erfahren Sie, wie Sie Benutzer in Ihrer Android-App mithilfe der systemeigenen Authentifizierung anmelden.
Abrufen eines Zugriffstokens
Sobald sich der Benutzer anmeldet, erwerben Sie ein Zugriffstoken, indem Sie die Bereiche angeben, für die das Zugriffstoken gültig ist.
DAS MSAL Native Authentication SDK unterstützt mehrere Zugriffstoken, sodass Sie mehrere Gruppen von Bereichen angeben und dann Zugriffstoken für jede Gruppe von Bereichen anfordern können:
Verwenden Sie den folgenden Codeschnipsel, um Werte für mehrere API-Gültigkeitsbereiche zu deklarieren und festzulegen:
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>() }Melden Sie Benutzende mit dem folgenden Codeschnipsel an:
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 } }Rufen Sie ein oder mehrere Zugriffstoken mithilfe des folgenden Codeschnipsels ab.
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 } } }Definieren Sie die
getAccessToken()Funktion wie im folgenden Code dargestellt: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") } }
Aufrufen einer API
Um einen API-Aufruf zu tätigen, verwenden Sie das zugriffstoken, das Sie im Abrufen eines Zugriffstokens und einer API-URL erworben haben:
Deklarieren und Festlegen von Werten für die API-URLs mithilfe des folgenden Codeausschnitts:
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" }Ersetzen Sie Folgendes:
-
Enter_URL_Of_First_Web_APIPlatzhalter mit dem vollständigen URL-Wert Ihrer ersten API. -
Enter_URL_Of_Second_Web_APIPlatzhalter mit dem vollständigen URL-Wert Ihrer zweiten API.
-
Verwenden Sie die folgenden Codeschnipsel, um eine API aufzurufen:
// 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) } }Definieren Sie die
performGetApiRequest()Funktion wie im folgenden Code dargestellt: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 } } }
Konfigurieren eines benutzerdefinierten Anspruchsanbieters
Wenn Sie Ansprüche aus einem externen System in das Token einfügen möchten, das an Ihre Anwendung ausgegeben wird, verwenden Sie einen benutzerdefinierten Anspruchsanbieter. Ein benutzerdefinierter Anspruchsanbieter besteht aus einer benutzerdefinierten Authentifizierungserweiterung, die eine externe REST-API aufruft, um Ansprüche aus externen Systemen abzurufen.
Führen Sie die Schritte unter Konfigurieren eines benutzerdefinierten Anspruchsanbieters durch, um Ansprüche aus einem externen System zu Ihren Sicherheitstoken hinzuzufügen.