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.
Dieser Artikel hilft Ihnen, die Typen zu verstehen, die in öffentlichen Client-Apps mit einem einzelnen und mehreren Konten verwendet werden, wobei sich der Schwerpunkt auf öffentlichen Client-Apps für ein einzelnes Konto befindet.
Die Azure Active Directory Authentifizierungsbibliothek (ADAL) modelliert den Server. Die Microsoft Authentication Library (MSAL) (MSAL) modelliert stattdessen Ihre Clientanwendung. Der Großteil der Android-Apps gilt als öffentliche Clients. Ein öffentlicher Client ist eine App, die einen geheimen Schlüssel nicht sicher aufbewahren kann.
MSAL ist auf die API-Oberfläche PublicClientApplication spezialisiert, um die Entwicklungsumgebung für Apps zu vereinfachen und zu verdeutlichen, die nur jeweils ein Konto verwenden können.
PublicClientApplication ist unterklassigt nach SingleAccountPublicClientApplication und MultipleAccountPublicClientApplication. Das folgende Diagramm zeigt die Beziehung zwischen diesen Klassen.
Öffentliche Clientanwendung für ein einzelnes Konto
Mit der SingleAccountPublicClientApplication Klasse können Sie eine MSAL-basierte App erstellen, mit der nur ein einzelnes Konto gleichzeitig angemeldet werden kann.
SingleAccountPublicClientApplication unterscheidet sich von PublicClientApplication in den folgenden Punkten:
- MSAL verfolgt das aktuell angemeldete Konto.
- Wenn Ihre App einen Broker verwendet (die Standardeinstellung während Microsoft Entra App-Registrierung) und auf einem Gerät installiert ist, auf dem ein Broker vorhanden ist, überprüft MSAL, ob das Konto weiterhin auf dem Gerät verfügbar ist.
-
signInermöglicht es Ihnen, sich explizit und unabhängig von der Anforderung von Berechtigungsbereichen mit einem Konto anzumelden. -
acquireTokenSilenterfordert keinen Kontoparameter. Wenn Sie ein Konto angeben und das von Ihnen angegebene Konto nicht mit dem von MSAL verwalteten aktuellen Konto übereinstimmt, wird einMsalClientExceptionausgelöst. -
acquireTokenermöglicht es dem Benutzer nicht, Konten zu wechseln. Wenn der Benutzer versucht, zu einem anderen Konto zu wechseln, wird eine Ausnahme ausgelöst. -
getCurrentAccountgibt ein Ergebnisobjekt zurück, das Folgendes bereitstellt:- Ein boolescher Wert, der angibt, ob das Konto geändert wurde. Ein Konto kann beispielsweise aufgrund der Entfernung vom Gerät geändert werden.
- Das vorherige Konto. Dies ist nützlich, wenn Sie lokale Daten bereinigen müssen, wenn das Konto vom Gerät entfernt wird oder wenn ein neues Konto angemeldet ist.
- Das currentAccount.
-
signOutentfernt alle Token, die Ihrem Client zugeordnet sind, vom Gerät.
Wenn ein Android-Authentifizierungsbroker wie Microsoft Authenticator, Link zu Windows (LTW) oder Intune-Unternehmensportal auf dem Gerät installiert ist und Ihre App für die Verwendung des Brokers konfiguriert ist, signOut wird das Konto nicht vom Gerät entfernt.
Szenario für ein einzelnes Konto
Der folgende Pseudocode veranschaulicht die Verwendung 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;
}
Öffentliche Clientanwendung für mehrere Konten
Die MultipleAccountPublicClientApplication Klasse wird verwendet, um MSAL-basierte Apps zu erstellen, mit denen mehrere Konten gleichzeitig angemeldet werden können. Es ermöglicht Ihnen, Konten wie folgt abzurufen, hinzuzufügen und zu entfernen:
Konto hinzufügen
Verwenden Sie ein oder mehrere Konten in Ihrer Anwendung, indem Sie ein oder mehrere Male aufrufen acquireToken .
Konten abrufen
- Rufen Sie auf
getAccount, um ein bestimmtes Konto zu erhalten. - Rufen Sie auf
getAccounts, um eine Liste der Konten abzurufen, die derzeit der App bekannt sind.
Ihre App kann nicht alle Microsoft Identity Platform Konten auf dem Gerät auflisten, das der Broker-App bekannt ist. Sie kann nur Konten aufzählen, die von Ihrer App verwendet wurden. Konten, die vom Gerät entfernt wurden, werden von diesen Funktionen nicht zurückgegeben.
Entfernen eines Kontos
Entfernen Sie ein Konto, indem Sie removeAccount mit einer Konto-ID aufrufen.
Wenn Ihre App für die Verwendung eines Brokers konfiguriert ist und ein Broker auf dem Gerät installiert ist, wird das Konto beim Anruf removeAccountnicht vom Broker entfernt. Es werden nur Token entfernt, die Ihrem Client zugeordnet sind.
Szenario mit mehreren Konten
Der folgende Pseudocode zeigt, wie Sie eine App mit mehreren Konten erstellen, Konten auf dem Gerät auflisten und Token erwerben.
// 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);