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.
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 exceptionMsalClientException
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)
{
}
});