Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Cet article vous aidera à comprendre les types utilisés dans les applications clientes publiques à un seul et plusieurs comptes, avec un focus sur les applications clientes publiques à compte unique.
La bibliothèque d’authentification (ADAL) Azure Active Directory modélise le serveur. Le Microsoft Authentication Library (MSAL) modélise plutôt 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 en toute sécurité un secret.
MSAL adapte l’interface de programmation de PublicClientApplication afin de simplifier et de clarifier l’expérience de développement pour les applications ne permettant l’utilisation que 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 à compte unique
La SingleAccountPublicClientApplication classe vous permet de créer une application MSAL qui autorise uniquement la connexion d’un seul compte à la fois.
SingleAccountPublicClientApplication diffère de PublicClientApplication des façons suivantes :
- MSAL effectue le suivi du compte actuellement connecté.
- Si votre application utilise un répartiteur (la valeur par défaut pendant l’inscription de l’application Microsoft Entra) et 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.
-
signInvous permet de connecter un compte explicitement et indépendamment de la demande d’étendues. -
acquireTokenSilentne nécessite 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 exceptionMsalClientExceptionest levée. -
acquireTokenn’autorise pas l’utilisateur à changer de compte. Si l’utilisateur tente de basculer vers un autre compte, une exception est levée. -
getCurrentAccountretourne un objet de résultat qui fournit les éléments suivants :- Valeur booléenne indiquant si le compte a changé. Un compte peut être modifié, par exemple, s’il est supprimé de l’appareil.
- Compte précédent. Cela est utile si vous devez effectuer un nettoyage des données locales lorsque le compte est supprimé de l’appareil ou lorsqu’un nouveau compte est connecté.
- Le currentAccount.
-
signOutsupprime tous les jetons associés à votre client de l’appareil.
Lorsqu'un répartiteur d'authentification Android tel que Microsoft Authenticator, Link to Windows (LTW) ou Intune Portail d'entreprise est installé sur l'appareil et votre application est configurée pour utiliser le répartiteur, signOut ne supprime pas le compte de l'appareil.
Scénario de compte unique
Le pseudo-code suivant illustre l’utilisation 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.
SignInParameters signInParameters = SignInParameters.builder()
.withActivity(getActivity()) // Pass the current activity
.withScopes(scopes) // Specify the scopes
.withCallback(new AuthenticationCallback() {
@Override
public void onSuccess(IAuthenticationResult authenticationResult){
mAccount = authenticationResult.getAccount();
}
@Override
public void onError(MsalException exception){
}
@Override
public void onCancel(){
}
})
.build();
app.signIn(signInParameters);
// 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 de plusieurs comptes
La MultipleAccountPublicClientApplication classe est utilisée pour créer des applications basées sur MSAL qui permettent à plusieurs comptes d’être connectés en même temps. Il 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
getAccountpour obtenir un compte spécifique. - Appelez
getAccountspour obtenir la liste des comptes actuellement connus de l’application.
Votre application ne pourra pas lister tous les comptes de la plateforme d’identités Microsoft présents sur l’appareil et connus de l’application broker. Il ne peut énumérer que les comptes qui ont été utilisés par votre application. Les comptes qui ont été supprimés de l’appareil ne seront pas retournés par ces fonctions.
Supprimer un compte
Supprimez un compte en appelant 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 ne sera pas supprimé du répartiteur lorsque vous appelez removeAccount. Seuls les jetons associés à votre client sont supprimés.
Scénario de plusieurs comptes
Le pseudo-code suivant montre comment créer une application de compte multiple, répertorier des comptes 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
AcquireTokenParameters acquireTokenParameters = new AcquireTokenParameters.Builder()
.startAuthorizationFromActivity(getActivity())
.withScopes(scopes)
.withCallback(new AuthenticationCallback(){
@Override
public void onSuccess(IAuthenticationResult authenticationResult) {
mAccount = authenticationResult.getAccount();
}
@Override
public void onError(MsalException exception){
}
@Override
public void onCancel(){
}
})
.build();
app.acquireToken(acquireTokenParameters);
...
// 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
AcquireTokenSilentParameters acquireTokenSilentParameters = new AcquireTokenSilentParameters.Builder()
.withScopes(scopes)
.forAccount(selectedAccount)
.fromAuthority(authority)
.withCallback(new SilentAuthenticationCallback() {
@Override
public void onSuccess(IAuthenticationResult authenticationResult) {
mAccount = authenticationResult.getAccount();
}
@Override
public void onError(MsalException exception){
}
})
.build();
app.acquireTokenSilentAsync(acquireTokenSilentParameters);