Snelstart: Gebruikers aanmelden en de Microsoft Graph API aanroepen vanuit een Android-appQuickstart: Sign in users and call the Microsoft Graph API from an Android app

In deze quickstart downloadt u een codevoorbeeld en voert u dit uit. Het codevoorbeeld laat zien hoe gebruikers kunnen worden aangemeld met een Android-toepassing, en een toegangstoken kunnen krijgen om de Microsoft Graph API aan te roepen.In this quickstart, you download and run a code sample that demonstrates how an Android application can sign in users and get an access token to call the Microsoft Graph API.

Zie Hoe het voorbeeld werkt voor een illustratie.See How the sample works for an illustration.

Toepassingen moeten worden voorgesteld door een app-object in Azure Active Directory, zodat het Microsoft identity platform uw toepassing van tokens kan voorzien.Applications must be represented by an app object in Azure Active Directory so that the Microsoft identity platform can provide tokens to your application.

VereistenPrerequisites

Stap 1: uw toepassing configureren in Azure PortalStep 1: Configure your application in the Azure portal

Voeg voor het voorbeeld code in deze Snelstartgids een omleidings-URI toe die compatibel is met de auth Broker.For the code sample in this quickstart to work, add a Redirect URI compatible with the Auth broker.

Al geconfigureerd Uw toepassing is al geconfigureerd met deze kenmerkenAlready configured Your application is configured with these attributes

Stap 2: Het project downloadenStep 2: Download the project

Voer het project uit met Android Studio.Run the project using Android Studio.

Stap 3: Uw app is geconfigureerd en klaar om te worden uitgevoerdStep 3: Your app is configured and ready to run

Uw project is geconfigureerd met waarden van de eigenschappen van uw app en is klaar om te worden uitgevoerd.We have configured your project with values of your app's properties and it's ready to run. De voorbeeld-app wordt gestart op het scherm Modus voor één account.The sample app starts on the Single Account Mode screen. Er wordt standaard een standaardbereik user.read verstrekt. Dit wordt gebruikt tijdens het lezen van uw eigen profielgegevens tijdens de aanroep van de Microsoft Graph API.A default scope, user.read, is provided by default, which is used when reading your own profile data during the Microsoft Graph API call. De URL voor de aanroep van de Microsoft Graph API wordt standaard verstrekt.The URL for the Microsoft Graph API call is provided by default. U kunt ze allebei desgewenst wijzigen.You can change both of these if you wish.

Gebruik van MSAL-voorbeeld-app met één account of meerdere accounts

Gebruik het app-menu om tussen modi met één of meerdere accounts te schakelen.Use the app menu to change between single and multiple account modes.

Meld u in de modus voor één account aan met een werk- of thuisaccount:In single account mode, sign in using a work or home account:

  1. Selecteer Graafgegevens interactief ophalen om de gebruiker om referenties te vragen.Select Get graph data interactively to prompt the user for their credentials. U ziet de uitvoer van de aanroep naar de Microsoft Graph API onder in het scherm.You'll see the output from the call to the Microsoft Graph API in the bottom of the screen.
  2. Nadat u bent aangemeld, selecteert u Graafgegevens op de achtergrond ophalen om een aanroep naar de Microsoft Graph API uit te voeren zonder dat de gebruiker opnieuw om referenties wordt gevraagd.Once signed in, select Get graph data silently to make a call to the Microsoft Graph API without prompting the user for credentials again. U ziet de uitvoer van de aanroep naar de Microsoft Graph API onder in het scherm.You'll see the output from the call to the Microsoft Graph API in the bottom of the screen.

In de modus voor meerdere accounts kunt u dezelfde stappen herhalen.In multiple account mode, you can repeat the same steps. Daarnaast kunt u het aangemelde account verwijderen, waardoor ook de tokens in de cache voor dat account worden verwijderd.Additionally, you can remove the signed-in account, which also removes the cached tokens for that account.

Notitie

Enter_the_Supported_Account_Info_Here

Stap 1: De voorbeeld-app downloadenStep 1: Get the sample app

Download de code.Download the code.

Stap 2: De voorbeeld-app uitvoerenStep 2: Run the sample app

Selecteer de emulator of het fysieke apparaat in de vervolgkeuzelijst Beschikbare apparaten in Android Studio en voer de app uit.Select your emulator, or physical device, from Android Studio's available devices dropdown and run the app.

De voorbeeld-app wordt gestart op het scherm Modus voor één account.The sample app starts on the Single Account Mode screen. Er wordt standaard een standaardbereik user.read verstrekt. Dit wordt gebruikt tijdens het lezen van uw eigen profielgegevens tijdens de aanroep van de Microsoft Graph API.A default scope, user.read, is provided by default, which is used when reading your own profile data during the Microsoft Graph API call. De URL voor de aanroep van de Microsoft Graph API wordt standaard verstrekt.The URL for the Microsoft Graph API call is provided by default. U kunt ze allebei desgewenst wijzigen.You can change both of these if you wish.

Gebruik van MSAL-voorbeeld-app met één account of meerdere accounts

Gebruik het app-menu om tussen modi met één of meerdere accounts te schakelen.Use the app menu to change between single and multiple account modes.

Meld u in de modus voor één account aan met een werk- of thuisaccount:In single account mode, sign in using a work or home account:

  1. Selecteer Graafgegevens interactief ophalen om de gebruiker om referenties te vragen.Select Get graph data interactively to prompt the user for their credentials. U ziet de uitvoer van de aanroep naar de Microsoft Graph API onder in het scherm.You'll see the output from the call to the Microsoft Graph API in the bottom of the screen.
  2. Nadat u bent aangemeld, selecteert u Graafgegevens op de achtergrond ophalen om een aanroep naar de Microsoft Graph API uit te voeren zonder dat de gebruiker opnieuw om referenties wordt gevraagd.Once signed in, select Get graph data silently to make a call to the Microsoft Graph API without prompting the user for credentials again. U ziet de uitvoer van de aanroep naar de Microsoft Graph API onder in het scherm.You'll see the output from the call to the Microsoft Graph API in the bottom of the screen.

In de modus voor meerdere accounts kunt u dezelfde stappen herhalen.In multiple account mode, you can repeat the same steps. Daarnaast kunt u het aangemelde account verwijderen, waardoor ook de tokens in de cache voor dat account worden verwijderd.Additionally, you can remove the signed-in account, which also removes the cached tokens for that account.

Hoe het voorbeeld werktHow the sample works

Schermafbeelding van de voorbeeld-app

De code is ingedeeld in fragmenten. Deze laten zien hoe u een MSAL-app voor één en meerdere accounts schrijft.The code is organized into fragments that show how to write a single and multiple accounts MSAL app. De codebestanden zijn als volgt ingedeeld:The code files are organized as follows:

FileFile DemonstreertDemonstrates
MainActivityMainActivity Beheert de gebruikersinterfaceManages the UI
MSGraphRequestWrapperMSGraphRequestWrapper Roept de Microsoft Graph API aan met behulp van het token dat door MSAL is verschaftCalls the Microsoft Graph API using the token provided by MSAL
MultipleAccountModeFragmentMultipleAccountModeFragment Initialiseert een toepassing met meerdere accounts, laadt een gebruikersaccount en haalt een token op om de Microsoft Graph API aan te roepenInitializes a multi-account application, loads a user account, and gets a token to call the Microsoft Graph API
SingleAccountModeFragmentSingleAccountModeFragment Initialiseert een toepassing met één account, laadt een gebruikersaccount en haalt een token op om de Microsoft Graph API aan te roepenInitializes a single-account application, loads a user account, and gets a token to call the Microsoft Graph API
res/auth_config_multiple_account.jsonres/auth_config_multiple_account.json Het configuratiebestand voor meerdere accountsThe multiple account configuration file
res/auth_config_single_account.jsonres/auth_config_single_account.json Het configuratiebestand voor één accountThe single account configuration file
Gradle Scripts/build.grade (Module:app)Gradle Scripts/build.grade (Module:app) De afhankelijkheden van de MSAL-bibliotheek worden hier toegevoegdThe MSAL library dependencies are added here

Deze bestanden worden nu in meer detail bekeken, met name de voor MSAL specifieke code.We'll now look at these files in more detail and call out the MSAL-specific code in each.

MSAL toevoegen aan de appAdding MSAL to the app

MSAL (com.microsoft.identity.client) is de bibliotheek die wordt gebruikt voor het aanmelden van gebruikers en het aanvragen van tokens die worden gebruikt voor toegang tot een API die wordt beveiligd door het Microsoft identity platform.MSAL (com.microsoft.identity.client) is the library used to sign in users and request tokens used to access an API protected by Microsoft identity platform. De bibliotheek wordt door Gradle 3.0+ geïnstalleerd wanneer u het volgende aan Gradle Scripts > build.gradle (Module: app) onder afhankelijkheden toevoegt:Gradle 3.0+ installs the library when you add the following to Gradle Scripts > build.gradle (Module: app) under Dependencies:

implementation 'com.microsoft.identity.client:msal:2.+'

U kunt dit zien in het voorbeeldproject in build.gradle (Module: app):You can see this in the sample project in build.gradle (Module: app):

dependencies {
    ...
    implementation 'com.microsoft.identity.client:msal:2.+'
    ...
}

Hiermee wordt Gradle geïnstrueerd om MSAL van Maven Central te downloaden en te compileren.This instructs Gradle to download and build MSAL from maven central.

MSAL-importbewerkingenMSAL imports

De importbewerkingen die relevant zijn voor de MSAL-bibliotheek zijn com.microsoft.identity.client.*.The imports that are relevant to the MSAL library are com.microsoft.identity.client.*. U ziet bijvoorbeeld import com.microsoft.identity.client.PublicClientApplication;. Dit is de naamruimte voor de klasse PublicClientApplication, die uw openbare clienttoepassing voorstelt.For example, you'll see import com.microsoft.identity.client.PublicClientApplication; which is the namespace for the PublicClientApplication class, which represents your public client application.

SingleAccountModeFragment.javaSingleAccountModeFragment.java

Dit bestand laat zien hoe u een MSAL-app met één account maakt en een Microsoft Graph API aanroept.This file demonstrates how to create a single account MSAL app and call a Microsoft Graph API.

Apps met één account worden slechts door één gebruiker gebruikt.Single account apps are only used by a single user. U hebt bijvoorbeeld slechts één account waarmee u zich aanmeldt bij uw toewijzings-app.For example, you might just have one account that you sign into your mapping app with.

MSAL-initialisatie met één accountSingle account MSAL initialization

In auth_config_single_account.json, in onCreateView(), wordt één account, PublicClientApplication, gemaakt met behulp van de configuratie-informatie die is opgeslagen in het bestand auth_config_single_account.json.In auth_config_single_account.json, in onCreateView(), a single account PublicClientApplication is created using the config information stored in the auth_config_single_account.json file. Op deze manier initialiseert u de MSAL-bibliotheek voor gebruik in een MSAL-app met één account:This is how you initialize the MSAL library for use in a single-account MSAL app:

...
// Creates a PublicClientApplication object with res/raw/auth_config_single_account.json
PublicClientApplication.createSingleAccountPublicClientApplication(getContext(),
        R.raw.auth_config_single_account,
        new IPublicClientApplication.ISingleAccountApplicationCreatedListener() {
            @Override
            public void onCreated(ISingleAccountPublicClientApplication application) {
                /**
                 * This test app assumes that the app is only going to support one account.
                 * This requires "account_mode" : "SINGLE" in the config json file.
                 **/
                mSingleAccountApp = application;
                loadAccount();
            }

            @Override
            public void onError(MsalException exception) {
                displayError(exception);
            }
        });

Een gebruiker aanmeldenSign in a user

In SingleAccountModeFragment.java bevindt de code voor het aanmelden van een gebruiker zich in initializeUI(), in de signInButton-click-handler.In SingleAccountModeFragment.java, the code to sign in a user is in initializeUI(), in the signInButton click handler.

Roep signIn() aan voordat u tokens gaat ophalen.Call signIn() before trying to acquire tokens. signIn() gedraagt zich alsof acquireToken() wordt aangeroepen, wat resulteert in een interactieve prompt voor de gebruiker om zich aan te melden.signIn() behaves as though acquireToken() is called, resulting in an interactive prompt for the user to sign in.

Het aanmelden van een gebruiker is een asynchrone bewerking.Signing in a user is an asynchronous operation. Er wordt een callback doorgegeven die de Microsoft Graph API aanroept en de gebruikersinterface bijwerkt zodra de gebruiker zich aanmeldt:A callback is passed that calls the Microsoft Graph API and update the UI once the user signs in:

mSingleAccountApp.signIn(getActivity(), null, getScopes(), getAuthInteractiveCallback());

Een gebruiker afmeldenSign out a user

In SingleAccountModeFragment.java bevindt de code voor het afmelden van een gebruiker zich in initializeUI(), in de signOutButton-click-handler.In SingleAccountModeFragment.java, the code to sign out a user is in initializeUI(), in the signOutButton click handler. Het afmelden van een gebruiker is een asynchrone bewerking.Signing a user out is an asynchronous operation. Als u de gebruiker afmeldt, wordt ook de tokencache voor dat account gewist.Signing the user out also clears the token cache for that account. Er wordt een callback gemaakt om de gebruikersinterface bij te werken nadat het gebruikersaccount is afgemeld:A callback is created to update the UI once the user account is signed out:

mSingleAccountApp.signOut(new ISingleAccountPublicClientApplication.SignOutCallback() {
    @Override
    public void onSignOut() {
        updateUI(null);
        performOperationOnSignOut();
    }

    @Override
    public void onError(@NonNull MsalException exception) {
        displayError(exception);
    }
});

Interactief of op de achtergrond een token ophalenGet a token interactively or silently

Als u de gebruiker zo min mogelijk prompts wilt presenteren, ontvangt u normaal gesproken een token op de achtergrond.To present the fewest number of prompts to the user, you'll typically get a token silently. Als er een fout optreedt, kunt u interactief een token verkrijgen.Then, if there's an error, attempt to get to token interactively. De eerste keer dat de app signIn() aanroept, fungeert het effectief als een aanroep acquireToken(), waarmee de gebruiker om referenties wordt gevraagd.The first time the app calls signIn(), it effectively acts as a call to acquireToken(), which will prompt the user for credentials.

Bepaalde situaties waarin de gebruiker kan worden gevraagd een account te selecteren, referenties in te voeren of toestemming te geven voor de machtigingen die uw app heeft aangevraagd, zijn:Some situations when the user may be prompted to select their account, enter their credentials, or consent to the permissions your app has requested are:

  • De eerste keer dat een gebruiker zich bij de toepassing aanmeldtThe first time the user signs in to the application
  • Als gebruiker hun wachtwoord opnieuw instellen, moeten ze hun referenties invoerenIf a user resets their password, they'll need to enter their credentials
  • Als de toestemming is ingetrokkenIf consent is revoked
  • Als uw app expliciet toestemming vereistIf your app explicitly requires consent
  • Wanneer via de toepassing voor het eerst toegang wordt aangevraagd tot een resourceWhen your application is requesting access to a resource for the first time
  • Wanneer MFA of ander beleid voor voorwaardelijke toegang is vereistWhen MFA or other Conditional Access policies are required

De code voor het interactief ophalen van een token, dat wil zeggen met de gebruikersinterface waarbij de gebruiker is betrokken, bevindt zich in SingleAccountModeFragment.java, in initializeUI(), in de callGraphApiInteractiveButton-click-handler:The code to get a token interactively, that is with UI that will involve the user, is in SingleAccountModeFragment.java, in initializeUI(), in the callGraphApiInteractiveButton click handler:

/**
 * If acquireTokenSilent() returns an error that requires an interaction (MsalUiRequiredException),
 * invoke acquireToken() to have the user resolve the interrupt interactively.
 *
 * Some example scenarios are
 *  - password change
 *  - the resource you're acquiring a token for has a stricter set of requirement than your Single Sign-On refresh token.
 *  - you're introducing a new scope which the user has never consented for.
 **/
mSingleAccountApp.acquireToken(getActivity(), getScopes(), getAuthInteractiveCallback());

Als de gebruiker al is aangemeld, staat acquireTokenSilentAsync() toe tokens op de achtergrond aanvragen, zoals getoond in initializeUI(), in de callGraphApiSilentButton-click-handler:If the user has already signed in, acquireTokenSilentAsync() allows apps to request tokens silently as shown in initializeUI(), in the callGraphApiSilentButton click handler:

/**
 * Once you've signed the user in,
 * you can perform acquireTokenSilent to obtain resources without interrupting the user.
 **/
  mSingleAccountApp.acquireTokenSilentAsync(getScopes(), AUTHORITY, getAuthSilentCallback());

Een account ladenLoad an account

De code voor het laden van een account bevindt zich in SingleAccountModeFragment.java in loadAccount().The code to load an account is in SingleAccountModeFragment.java in loadAccount(). Het laden van het gebruikers account is een asynchrone bewerking, dus af te handelen callbacks wanneer het account wordt geladen, gewijzigd of wanneer een fout optreedt, worden doorgegeven aan MSAL.Loading the user's account is an asynchronous operation, so callbacks to handle when the account loads, changes, or an error occurs is passed to MSAL. De volgende code verwerkt ook onAccountChanged(), wat plaatsvindt wanneer een account wordt verwijderd, de gebruiker naar een ander account overschakelt, enzovoort.The following code also handles onAccountChanged(), which occurs when an account is removed, the user changes to another account, and so on.

private void loadAccount() {
    ...

    mSingleAccountApp.getCurrentAccountAsync(new ISingleAccountPublicClientApplication.CurrentAccountCallback() {
        @Override
        public void onAccountLoaded(@Nullable IAccount activeAccount) {
            // You can use the account data to update your UI or your app database.
            updateUI(activeAccount);
        }

        @Override
        public void onAccountChanged(@Nullable IAccount priorAccount, @Nullable IAccount currentAccount) {
            if (currentAccount == null) {
                // Perform a cleanup task as the signed-in account changed.
                performOperationOnSignOut();
            }
        }

        @Override
        public void onError(@NonNull MsalException exception) {
            displayError(exception);
        }
    });

Microsoft Graph aanroepenCall Microsoft Graph

Wanneer een gebruiker is aangemeld, wordt de aanroep naar Microsoft Graph uitgevoerd via een HTTP-aanvraag door callGraphAPI(), die in SingleAccountModeFragment.java is gedefinieerd.When a user is signed in, the call to Microsoft Graph is made via an HTTP request by callGraphAPI() which is defined in SingleAccountModeFragment.java. Deze functie is een wrapper waarmee het voorbeeld wordt vereenvoudigd door bepaalde taken uit te voeren, zoals het ophalen van het toegangstoken van de authenticationResult, het verpakken van de aanroep in de MSGraphRequestWrapper en het weergeven van de resultaten van de aanroep.This function is a wrapper that simplifies the sample by doing some tasks such as getting the access token from the authenticationResult and packaging the call to the MSGraphRequestWrapper, and displaying the results of the call.

private void callGraphAPI(final IAuthenticationResult authenticationResult) {
    MSGraphRequestWrapper.callGraphAPIUsingVolley(
            getContext(),
            graphResourceTextView.getText().toString(),
            authenticationResult.getAccessToken(),
            new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {
                    /* Successfully called graph, process data and send to UI */
                    ...
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    ...
                }
            });
}

auth_config_single_account.jsonauth_config_single_account.json

Dit is het configuratiebestand voor een MSAL-app die gebruikmaakt van één account.This is the configuration file for a MSAL app that uses a single account.

Zie Inzicht krijgen in het Android MSAL-configuratiebestand voor een uitleg van deze velden.See Understand the Android MSAL configuration file for an explanation of these fields.

Let op de aanwezigheid van "account_mode" : "SINGLE", waarmee deze app wordt geconfigureerd voor het gebruik van één account.Note the presence of "account_mode" : "SINGLE", which configures this app to use a single account.

"client_id" is vooraf geconfigureerd voor het gebruik van een app-objectregistratie die door Microsoft wordt onderhouden."client_id" is preconfigured to use an app object registration that Microsoft maintains. "redirect_uri" is vooraf geconfigureerd voor het gebruik van de ondertekeningssleutel die met het codevoorbeeld wordt meegeleverd."redirect_uri"is preconfigured to use the signing key provided with the code sample.

{
  "client_id" : "0984a7b6-bc13-4141-8b0d-8f767e136bb7",
  "authorization_user_agent" : "DEFAULT",
  "redirect_uri" : "msauth://com.azuresamples.msalandroidapp/1wIqXSqBj7w%2Bh11ZifsnqwgyKrY%3D",
  "account_mode" : "SINGLE",
  "broker_redirect_uri_registered": true,
  "authorities" : [
    {
      "type": "AAD",
      "audience": {
        "type": "AzureADandPersonalMicrosoftAccount",
        "tenant_id": "common"
      }
    }
  ]
}

MultipleAccountModeFragment.javaMultipleAccountModeFragment.java

Dit bestand laat zien hoe u een MSAL-app met meerdere accounts maakt en een Microsoft Graph API aanroept.This file demonstrates how to create a multiple account MSAL app and call a Microsoft Graph API.

Een voorbeeld van een app met meerdere accounts is een e-mail-app waarmee u kunt werken met meerdere gebruikersaccounts, zoals een werkaccount en een persoonlijk account.An example of a multiple account app is a mail app that allows you to work with multiple user accounts such as a work account and a personal account.

MSAL-initialisatie met meerdere accountsMultiple account MSAL initialization

In het bestand MultipleAccountModeFragment.java, in onCreateView(), wordt een app-object met meerdere acoounts (IMultipleAccountPublicClientApplication) gemaakt met behulp van de configuratie-informatie die is opgeslagen in het bestand auth_config_multiple_account.json file:In the MultipleAccountModeFragment.java file, in onCreateView(), a multiple account app object (IMultipleAccountPublicClientApplication) is created using the config information stored in the auth_config_multiple_account.json file:

// Creates a PublicClientApplication object with res/raw/auth_config_multiple_account.json
PublicClientApplication.createMultipleAccountPublicClientApplication(getContext(),
        R.raw.auth_config_multiple_account,
        new IPublicClientApplication.IMultipleAccountApplicationCreatedListener() {
            @Override
            public void onCreated(IMultipleAccountPublicClientApplication application) {
                mMultipleAccountApp = application;
                loadAccounts();
            }

            @Override
            public void onError(MsalException exception) {
                ...
            }
        });

Het gemaakte MultipleAccountPublicClientApplication-object wordt opgeslagen in een klasselidvariabele, zodat het kan worden gebruikt om te communiceren met de MSAL-bibliotheek om tokens te verkrijgen en het gebruikersaccount te laden en verwijderen.The created MultipleAccountPublicClientApplication object is stored in a class member variable so that it can be used to interact with the MSAL library to acquire tokens and load and remove the user account.

Een account ladenLoad an account

Apps met meerdere accounts roepen gewoonlijk getAccounts() aan om het account te selecteren dat moet worden gebruikt voor MSAL-bewerkingen.Multiple account apps usually call getAccounts() to select the account to use for MSAL operations. De code om een account te laden, bevindt zich in het bestand MultipleAccountModeFragment.java in loadAccounts().The code to load an account is in the MultipleAccountModeFragment.java file, in loadAccounts(). Het laden van het gebruikersaccount is een asynchrone bewerking.Loading the user's account is an asynchronous operation. Een callback verwerkt dus de situaties waarin het account wordt geladen, gewijzigd of wanneer een fout optreedt.So a callback handles the situations when the account is loaded, changes, or an error occurs.

/**
 * Load currently signed-in accounts, if there's any.
 **/
private void loadAccounts() {
    if (mMultipleAccountApp == null) {
        return;
    }

    mMultipleAccountApp.getAccounts(new IPublicClientApplication.LoadAccountsCallback() {
        @Override
        public void onTaskCompleted(final List<IAccount> result) {
            // You can use the account data to update your UI or your app database.
            accountList = result;
            updateUI(accountList);
        }

        @Override
        public void onError(MsalException exception) {
            displayError(exception);
        }
    });
}

Interactief of op de achtergrond een token ophalenGet a token interactively or silently

Bepaalde situaties waarin de gebruiker kan worden gevraagd een account te selecteren, referenties in te voeren of toestemming te geven voor de machtigingen die uw app heeft aangevraagd, zijn:Some situations when the user may be prompted to select their account, enter their credentials, or consent to the permissions your app has requested are:

  • De eerste keer dat gebruikers zich aanmelden bij de toepassingThe first time users sign in to the application
  • Als gebruiker hun wachtwoord opnieuw instellen, moeten ze hun referenties invoerenIf a user resets their password, they'll need to enter their credentials
  • Als de toestemming is ingetrokkenIf consent is revoked
  • Als uw app expliciet toestemming vereistIf your app explicitly requires consent
  • Wanneer via de toepassing voor het eerst toegang wordt aangevraagd tot een resourceWhen your application is requesting access to a resource for the first time
  • Wanneer MFA of ander beleid voor voorwaardelijke toegang is vereistWhen MFA or other Conditional Access policies are required

Voor apps met meerdere accounts moeten tokens doorgaans interactief worden verkregen, dat wil zeggen met de gebruikersinterface waarbij de gebruiker betrokken is en met een aanroep naar acquireToken().Multiple account apps should typically acquire tokens interactively, that is with UI that involves the user, with a call to acquireToken(). De code voor het interactief ophalen van een token bevindt zich in het bestand MultipleAccountModeFragment.java in initializeUI(), in de callGraphApiInteractiveButton-click-handler:The code to get a token interactively is in the MultipleAccountModeFragment.java file in initializeUI(), in the callGraphApiInteractiveButton click handler:

/**
 * Acquire token interactively. It will also create an account object for the silent call as a result (to be obtained by getAccount()).
 *
 * If acquireTokenSilent() returns an error that requires an interaction,
 * invoke acquireToken() to have the user resolve the interrupt interactively.
 *
 * Some example scenarios are
 *  - password change
 *  - the resource you're acquiring a token for has a stricter set of requirement than your SSO refresh token.
 *  - you're introducing a new scope which the user has never consented for.
 **/
mMultipleAccountApp.acquireToken(getActivity(), getScopes(), getAuthInteractiveCallback());

Gebruikers zouden zich niet telkens hoeven aanmelden wanneer apps een token aanvragen.Apps shouldn't require the user to sign in every time they request a token. Als de gebruiker al is aangemeld, staat acquireTokenSilentAsync() toe tokens aan te vragen zonder tussenkomst van de gebruiker, zoals getoond in het bestandMultipleAccountModeFragment.java in initializeUI(), in de callGraphApiSilentButton-click-handler:If the user has already signed in, acquireTokenSilentAsync() allows apps to request tokens without prompting the user, as shown in the MultipleAccountModeFragment.java file, ininitializeUI() in the callGraphApiSilentButton click handler:

/**
 * Performs acquireToken without interrupting the user.
 *
 * This requires an account object of the account you're obtaining a token for.
 * (can be obtained via getAccount()).
 */
mMultipleAccountApp.acquireTokenSilentAsync(getScopes(),
    accountList.get(accountListSpinner.getSelectedItemPosition()),
    AUTHORITY,
    getAuthSilentCallback());

Een account verwijderenRemove an account

De code voor het verwijderen van een account en alle tokens voor het account die in de cache zijn opgeslagen, bevindt zich in het bestand MultipleAccountModeFragment.java in initializeUI(), in de handler voor de knop Account verwijderen.The code to remove an account, and any cached tokens for the account, is in the MultipleAccountModeFragment.java file in initializeUI() in the handler for the remove account button. Voordat u een account kunt verwijderen, hebt u een accountobject nodig dat u hebt verkregen met MSAL-methoden als getAccounts() en acquireToken().Before you can remove an account, you need an account object, which you obtain from MSAL methods like getAccounts() and acquireToken(). Aangezien het verwijderen van een account een asynchrone bewerking is, wordt de onRemoved-callback verstrekt om de gebruikersinterface bij te werken.Because removing an account is an asynchronous operation, the onRemoved callback is supplied to update the UI.

/**
 * Removes the selected account and cached tokens from this app (or device, if the device is in shared mode).
 **/
mMultipleAccountApp.removeAccount(accountList.get(accountListSpinner.getSelectedItemPosition()),
        new IMultipleAccountPublicClientApplication.RemoveAccountCallback() {
            @Override
            public void onRemoved() {
                ...
                /* Reload account asynchronously to get the up-to-date list. */
                loadAccounts();
            }

            @Override
            public void onError(@NonNull MsalException exception) {
                displayError(exception);
            }
        });

auth_config_multiple_account.jsonauth_config_multiple_account.json

Dit is het configuratiebestand voor een MSAL-app die gebruikmaakt van meerdere accounts.This is the configuration file for a MSAL app that uses multiple accounts.

Zie Inzicht krijgen in het Android MSAL-configuratiebestand voor een uitleg van de verschillende velden.See Understand the Android MSAL configuration file for an explanation of the various fields.

In tegenstelling tot het auth_config_single_account.json-configuratiebestand heeft dit configuratie "account_mode" : "MULTIPLE" in plaats van "account_mode" : "SINGLE", omdat dit een app voor meerdere accounts is.Unlike the auth_config_single_account.json configuration file, this config file has "account_mode" : "MULTIPLE" instead of "account_mode" : "SINGLE" because this is a multiple account app.

"client_id" is vooraf geconfigureerd voor het gebruik van een app-objectregistratie die door Microsoft wordt onderhouden."client_id" is preconfigured to use an app object registration that Microsoft maintains. "redirect_uri" is vooraf geconfigureerd voor het gebruik van de ondertekeningssleutel die met het codevoorbeeld wordt meegeleverd."redirect_uri"is preconfigured to use the signing key provided with the code sample.

{
  "client_id" : "0984a7b6-bc13-4141-8b0d-8f767e136bb7",
  "authorization_user_agent" : "DEFAULT",
  "redirect_uri" : "msauth://com.azuresamples.msalandroidapp/1wIqXSqBj7w%2Bh11ZifsnqwgyKrY%3D",
  "account_mode" : "MULTIPLE",
  "broker_redirect_uri_registered": true,
  "authorities" : [
    {
      "type": "AAD",
      "audience": {
        "type": "AzureADandPersonalMicrosoftAccount",
        "tenant_id": "common"
      }
    }
  ]
}

Help en ondersteuningHelp and support

Als u hulp nodig hebt, een probleem wilt melden of meer informatie wilt over uw ondersteuningsopties, raadpleegt u Hulp en ondersteuning voor ontwikkelaars.If you need help, want to report an issue, or want to learn about your support options, see Help and support for developers.

Volgende stappenNext steps

Ga naar de Android-zelfstudie waarin u een Android-app bouwt die een toegangstoken van het Microsoft-identiteitsplatform ontvangt en dit gebruikt om de Microsoft Graph API aan te roepen.Move on to the Android tutorial in which you build an Android app that gets an access token from the Microsoft identity platform and uses it to call the Microsoft Graph API.