Partager via


Applications clientes publiques monocomptes et multicomptes

Cet article va vous aider à comprendre les types utilisés dans les applications clientes publiques monocomptes et multicomptes, puis va s’intéresser plus particulièrement aux applications clientes publiques monocomptes.

En revanche, la bibliothèque d’authentification Microsoft (MSAL) modélise votre application cliente. La majorité des applications Android sont considérées comme des clients publics. Un client public est une application qui ne peut pas conserver un secret de façon sécurisée.

MSAL spécialise la surface d’API de PublicClientApplication pour simplifier et clarifier l’expérience de développement des applications qui autorisent l’utilisation d’un seul compte à la fois. PublicClientApplication est sous-classé par SingleAccountPublicClientApplication et MultipleAccountPublicClientApplication. Le diagramme suivant montre la relation entre ces classes.

SingleAccountPublicClientApplication UML Class Diagram

Application cliente publique monocompte

La classe SingleAccountPublicClientApplication vous permet de créer une application MSAL qui autorise la connexion d’un seul compte à la fois. SingleAccountPublicClientApplication diffère de PublicClientApplication des manières suivantes :

  • MSAL suit le compte actuellement connecté.
    • Si votre application utilise un répartiteur (par défaut lors de l’inscription d’application sur le portail Azure) et qu’elle est installée sur un appareil sur lequel un répartiteur est présent, MSAL vérifie que le compte est toujours disponible sur l’appareil.
  • signIn vous permet de connecter un compte explicitement et indépendamment de la demande d’étendues.
  • acquireTokenSilent n’exige pas de paramètre de compte. Si vous fournissez un compte et si le compte que vous fournissez ne correspond pas au compte actuellement suivi par MSAL, une exception MsalClientException est levée.
  • acquireToken ne permet pas à l’utilisateur de changer de compte. Si l’utilisateur essaie de passer à un autre compte, une exception est levée.
  • getCurrentAccount retourne un objet de résultat qui fournit ce qui suit :
    • Une valeur booléenne indiquant si le compte a changé. Vous pouvez changer de compte suite à sa suppression de l’appareil, par exemple.
    • Le compte précédent. Cette information s’avère utile si vous avez besoin d’effectuer un nettoyage des données locales quand le compte est supprimé de l’appareil ou quand un nouveau compte est connecté.
    • Le compte actuel.
  • signOut supprime de l’appareil tous les jetons associés à votre client.

Quand un répartiteur d’authentification Android, comme Microsoft Authenticator ou Portail d’entreprise Intune est installé sur l’appareil et que votre application est configurée pour utiliser le répartiteur, signOut ne supprime pas le compte de l’appareil.

Scénario monocompte

Le pseudo-code suivant illustre l’utilisation de SingleAccountPublicClientApplication.

// Construct Single Account Public Client Application
ISingleAccountPublicClientApplication app = PublicClientApplication.createSingleAccountPublicClientApplication(getApplicationContext(), R.raw.msal_config);

String[] scopes = {"User.Read"};
IAccount mAccount = null;

// Acquire a token interactively
// The user will get a UI prompt before getting the token.
app.signIn(getActivity(), scopes, new AuthenticationCallback()
{

        @Override
        public void onSuccess(IAuthenticationResult authenticationResult) 
        {
            mAccount = authenticationResult.getAccount();
        }

        @Override
        public void onError(MsalException exception)
        {
        }

        @Override
        public void onCancel()
        {
        }
    }
);

// Load Account Specific Data
getDataForAccount(account);

// Get Current Account
ICurrentAccountResult currentAccountResult = app.getCurrentAccount();
if (currentAccountResult.didAccountChange())
{
    // Account Changed Clear existing account data
    clearDataForAccount(currentAccountResult.getPriorAccount());
    mAccount = currentAccountResult.getCurrentAccount();
    if (account != null)
    {
        //load data for new account
        getDataForAccount(account);
    }
}

// Sign out
if (app.signOut())
{
    clearDataForAccount(mAccount);
    mAccount = null;
}

Application cliente publique multicompte

La classe MultipleAccountPublicClientApplication est utilisée pour créer des applications MSAL qui autorisent plusieurs comptes à se connecter en même temps. Elle vous permet d’obtenir, d’ajouter et de supprimer des comptes comme suit :

Ajouter un compte

Utilisez un ou plusieurs comptes dans votre application en appelant acquireToken une ou plusieurs fois.

Obtenir des comptes

  • Appelez getAccount pour obtenir un compte spécifique.
  • Appelez getAccounts pour obtenir la liste des comptes actuellement connus de l’application.

Votre application ne sera pas en mesure d’énumérer tous les comptes de la plateforme d’identités Microsoft présents sur l’appareil et connus de l’application de répartiteur. Elle peut uniquement énumérer les comptes qui ont été utilisés par votre application. Les comptes qui ont été supprimés de l’appareil ne sont pas retournés par ces fonctions.

Supprimer un compte

Pour supprimer un compte, appelez removeAccount avec un identificateur de compte.

Si votre application est configurée pour utiliser un répartiteur et qu’un répartiteur est installé sur l’appareil, le compte n’est pas supprimé du répartiteur quand vous appelez removeAccount. Seuls les jetons associés à votre client sont supprimés.

Scénario multicompte

Le pseudo-code suivant montre comment créer une application multicompte, lister les comptes présents sur l’appareil et acquérir des jetons.

// Construct Multiple Account Public Client Application
IMultipleAccountPublicClientApplication app = PublicClientApplication.createMultipleAccountPublicClientApplication(getApplicationContext(), R.raw.msal_config);

String[] scopes = {"User.Read"};
IAccount mAccount = null;

// Acquire a token interactively
// The user will be required to interact with a UI to obtain a token
app.acquireToken(getActivity(), scopes, new AuthenticationCallback()
 {

        @Override
        public void onSuccess(IAuthenticationResult authenticationResult) 
        {
            mAccount = authenticationResult.getAccount();
        }

        @Override
        public void onError(MsalException exception)
        {
        }

        @Override
        public void onCancel()
        {
        }
 });

...

// Get the default authority
String authority = app.getConfiguration().getDefaultAuthority().getAuthorityURL().toString();

// Get a list of accounts on the device
List<IAccount> accounts = app.getAccounts();

// Pick an account to obtain a token from without prompting the user to sign in
IAccount selectedAccount = accounts.get(0);

// Get a token without prompting the user
app.acquireTokenSilentAsync(scopes, selectedAccount, authority, new SilentAuthenticationCallback()
{

        @Override
        public void onSuccess(IAuthenticationResult authenticationResult) 
        {
            mAccount = authenticationResult.getAccount();
        }

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