Tutorial: Verwenden des Modus für gemeinsam genutzte Geräte in Ihrer Android-Anwendung

In diesem Tutorial lernen Android-Entwickler*innen und Administrator*innen von Microsoft Entra-Mandanten (Azure AD) den Code, die Authenticator-App und die Mandanteneinstellungen kennen, die erforderlich sind, um den Modus für gemeinsam genutzte Geräte für eine Android-App zu aktivieren.

Dieses Tutorial umfasst folgende Punkte:

  • Herunterladen eines Codebeispiels
  • Aktivieren und Erkennen des Modus für gemeinsam genutzte Geräte
  • Erkennen des Modus für ein bzw. mehrere Konten
  • Erkennen eines Benutzerwechsels und Aktivieren der globalen An- und Abmeldung
  • Einrichten des Mandanten und Registrieren der Anwendung
  • Einrichten eines Android-Geräts im Modus für gemeinsam genutzte Geräte
  • Ausführen der Beispiel-App

Voraussetzungen

Entwicklerhandbuch

Dieser Abschnitt des Tutorials enthält eine Anleitung für Entwickler zum Implementieren des Modus für gemeinsam genutzte Geräte in einer Android-Anwendung mithilfe der Microsoft-Authentifizierungsbibliothek (MSAL). Informationen zum Integrieren der MSAL in Ihre Android-App, Anmelden eines Benutzers, Aufrufen des Microsoft-Graphen und Abmelden eines Benutzers finden Sie im Tutorial zu MSAL für Android.

Herunterladen des Beispiels

Klonen Sie die Beispielanwendung über GitHub. Das Beispiel funktioniert im Modus mit einem oder mehreren Konten.

Hinzufügen des MSAL SDK zu Ihrem lokalen Maven-Repository

Falls Sie die Beispiel-App nicht verwenden, müssen Sie die MSAL der Datei „build.gradle“ wie folgt hinzufügen:

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

Konfigurieren Ihrer App für den Modus für gemeinsam genutzte Geräte

Weitere Informationen zum Einrichten Ihrer config-Datei finden Sie in der Dokumentation zur Konfiguration.

Legen Sie "shared_device_mode_supported" in Ihrer MSAL-Konfigurationsdatei auf true fest.

Es kann auch sein, dass Sie die Unterstützung des Modus mit mehreren Konten nicht planen. Dies kann beispielsweise der Fall sein, wenn Sie kein gemeinsam genutztes Gerät verwenden und Benutzer sich mit mehr als einem Konto gleichzeitig an der App anmelden können. Falls dies zutrifft, sollten Sie "account_mode" auf "SINGLE" festlegen. So wird sichergestellt, dass für Ihre App immer ISingleAccountPublicClientApplication genutzt wird, und die MSAL-Integration wird erheblich vereinfacht. Der Standardwert von "account_mode" lautet "MULTIPLE", daher ist es wichtig, diesen Wert in der Konfigurationsdatei zu ändern, wenn Sie den Modus "single account" verwenden.

Hier ist ein Beispiel für die Datei „auth_config.json“ angegeben, die im Verzeichnis app>main>res>raw der Beispiel-App enthalten ist:

{
  "client_id": "Client ID after app registration at https://aka.ms/MobileAppReg",
  "authorization_user_agent": "DEFAULT",
  "redirect_uri": "Redirect URI after app registration at https://aka.ms/MobileAppReg",
  "account_mode": "SINGLE",
  "broker_redirect_uri_registered": true,
  "shared_device_mode_supported": true,
  "authorities": [
    {
      "type": "AAD",
      "audience": {
        "type": "AzureADandPersonalMicrosoftAccount",
        "tenant_id": "common"
      }
    }
  ]
}

Erkennen des Modus für gemeinsam genutzte Geräte

Im Modus für gemeinsam genutzte Geräte können Sie Android-Geräte so konfigurieren, dass sie von mehreren Mitarbeitern gemeinsam genutzt werden können, während gleichzeitig eine auf Microsoft Identity basierende Verwaltung der Geräte erfolgt. Mitarbeiter können sich bei ihren Geräten anmelden und schnell auf Kundeninformationen zugreifen. Nachdem die Mitarbeiter ihre Schicht oder Aufgabe beendet haben, können sie sich mit nur einem Klick von allen Apps auf dem freigegebenen Gerät abmelden, und das Gerät ist dann sofort für die Nutzung durch den nächsten Mitarbeiter bereit.

Ermitteln Sie mit isSharedDevice(), ob eine App auf einem Gerät ausgeführt wird, das sich im Modus für gemeinsam genutzte Geräte befindet. Anhand dieses Flags kann Ihre App ermitteln, ob die Benutzeroberfläche entsprechend geändert werden soll.

Im Codeausschnitt unten wird veranschaulicht, wie Sie isSharedDevice() nutzen können. Er stammt aus der SingleAccountModeFragment-Klasse in der Beispiel-App:

deviceModeTextView.setText(mSingleAccountApp.isSharedDevice() ? "Shared" : "Non-Shared");

Initialisieren des PublicClientApplication-Objekts

Wenn Sie "account_mode":"SINGLE" in der config-Datei für MSAL festlegen, können Sie das zurückgegebene Anwendungsobjekt problemlos in ein ISingleAccountPublicCLientApplication-Element umwandeln.

private ISingleAccountPublicClientApplication mSingleAccountApp;

/*Configure your sample app and save state for this activity*/
PublicClientApplication.create(this.getApplicationCOntext(),
  R.raw.auth_config,
  new PublicClientApplication.ApplicationCreatedListener(){
  @Override
  public void onCreated(IPublicClientApplication application){
  mSingleAccountApp = (ISingleAccountPublicClientApplication)application;
  loadAccount();
  }
  @Override
  public void onError(MsalException exception){
  /*Fail to initialize PublicClientApplication */
  }
});

Erkennen des Moduls für ein bzw. mehrere Konten

Wenn Sie eine App schreiben, die nur für Mitarbeiter in Service und Produktion auf einem gemeinsam genutzten Gerät eingesetzt wird, empfehlen wir Ihnen, für die App nur die Unterstützung des Modus mit einem einzelnen Konto vorzusehen. Dies gilt für die meisten Anwendungen, bei denen es um die Abarbeitung von Aufgaben geht, z. B. in Apps für Gesundheitsdaten oder Abrechnungsvorgänge und den meisten branchenspezifischen Apps. Auf diese Weise wird die Entwicklungsarbeit vereinfacht, weil viele Features des SDK nicht abgedeckt werden müssen.

Wenn Ihre App mehrere Konten und den Modus für freigegebene Geräte unterstützt, müssen Sie eine Typüberprüfung und Umwandlung auf die entsprechende Schnittstelle durchführen, wie unten beschrieben.

private IPublicClientApplication mApplication;

        if (mApplication instanceOf IMultipleAccountPublicClientApplication) {
          IMultipleAccountPublicClientApplication multipleAccountApplication = (IMultipleAccountPublicClientApplication) mApplication;
          ...
        } else if (mApplication instanceOf    ISingleAccountPublicClientApplication) {
           ISingleAccountPublicClientApplication singleAccountApplication = (ISingleAccountPublicClientApplication) mApplication;
            ...
        }

Abrufen des angemeldeten Benutzers und Ermitteln, ob sich der Benutzer des Geräts geändert hat

Mit der loadAccount-Methode wird das Konto des angemeldeten Benutzers abgerufen. Mit der onAccountChanged-Methode wird ermittelt, ob sich der angemeldete Benutzer geändert hat. Wenn dies der Fall ist, wird eine Bereinigung durchgeführt:

private void loadAccount()
{
  mSingleAccountApp.getCurrentAccountAsync(new ISingleAccountPublicClientApplication.CurrentAccountCallback())
  {
    @Override
    public void onAccountLoaded(@Nullable IAccount activeAccount)
    {
      if (activeAccount != null)
      {
        signedInUser = activeAccount;
        mSingleAccountApp.acquireTokenSilentAsync(SCOPES,"http://login.microsoftonline.com/common",getAuthSilentCallback());
      }
    }
    @Override
    public void onAccountChanged(@Nullable IAccount priorAccount, @Nullable Iaccount currentAccount)
    {
      if (currentAccount == null)
      {
        //Perform a cleanup task as the signed-in account changed.
        updateSingedOutUI();
      }
    }
    @Override
    public void onError(@NonNull Exception exception)
    {
    }
  }
}

Globales Anmelden eines Benutzers

Hiermit wird ein Benutzer über das Gerät mit der Authenticator-App bei anderen Apps angemeldet, die MSAL verwenden:

private void onSignInClicked()
{
  mSingleAccountApp.signIn(getActivity(), SCOPES, null, getAuthInteractiveCallback());
}

Globales Abmelden eines Benutzers

Mit dem folgenden Code wird das angemeldete Konto entfernt, und zwischengespeicherte Token werden nicht nur für die App gelöscht, sondern auch von dem Gerät, das sich im Modus für die gemeinsame Nutzung befindet:

private void onSignOutClicked()
{
  mSingleAccountApp.signOut(new ISingleAccountPublicClientApplication.SignOutCallback()
  {
    @Override
    public void onSignOut()
    {
      updateSignedOutUI();
    }
    @Override
    public void onError(@NonNull MsalException exception)
    {
      /*failed to remove account with an exception*/
    }
  });
}

Empfangen einer Übertragung zur Erkennung einer von anderen Anwendungen initiierten globalen Abmeldung

Um die Übertragung für eine Kontoänderung zu empfangen, müssen Sie einen Übertragungsempfänger registrieren. Es wird empfohlen, Ihren Broadcastempfänger über die im Kontext registrierten Empfänger zu registrieren.

Wenn eine Kontoänderungsübertragung empfangen wird, rufen Sie sofort die angemeldeten Benutzer*innen ab und ermitteln, ob Benutzer*innen auf dem Gerät geändert wurden. Wenn eine Änderung erkannt wird, initiieren Sie die Datenbereinigung für ein zuvor angemeldetes Konto. Es wird empfohlen, alle Vorgänge ordnungsgemäß zu beenden und eine Datenbereinigung durchzuführen.

Der folgende Codeausschnitt zeigt, wie Sie einen Übertragungsempfänger registrieren können.

private static final String CURRENT_ACCOUNT_CHANGED_BROADCAST_IDENTIFIER = "com.microsoft.identity.client.sharedmode.CURRENT_ACCOUNT_CHANGED";
private BroadcastReceiver mAccountChangedBroadcastReceiver;
private void registerAccountChangeBroadcastReceiver(){
    mAccountChangedBroadcastReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            //INVOKE YOUR PRIOR ACCOUNT CLEAN UP LOGIC HERE
        }
    };
    IntentFilter filter = new

    IntentFilter(CURRENT_ACCOUNT_CHANGED_BROADCAST_IDENTIFIER);
    this.registerReceiver(mAccountChangedBroadcastReceiver, filter);
}

Administratorhandbuch

Die folgenden Schritten beschreiben, wie Sie Ihre Anwendung einrichten und für Ihr Gerät den Modus für die gemeinsame Nutzung festlegen.

Registrieren der Anwendung

Registrieren Sie als Erstes Ihre Anwendung bei Ihrem Organisationsmandanten. Geben Sie anschließend die unten angegebenen Werte in „auth_config.json“ ein, damit Ihre Anwendung richtig ausgeführt wird.

Weitere Informationen zur Vorgehensweise finden Sie unter Anwendung registrieren.

Hinweis

Verwenden Sie beim Registrieren Ihrer App die Schnellstartanleitung auf der linken Seite, und wählen Sie Android aus. Sie gelangen auf eine Seite, auf der Sie zum Eingeben von Paketname und Signaturhash für Ihre App aufgefordert werden. Dies ist sehr wichtig, um sicherzustellen, dass Ihre App-Konfiguration funktioniert. Sie erhalten dann ein Konfigurationsobjekt für Ihre App, das Sie ausschneiden und in die Datei „auth_config.json“ einfügen können.

Configure your Android app page

Sie sollten die Option Diese Änderung für mich vornehmen auswählen, und dann Werte angeben, welche von der Schnellstartanleitung angefragt werden. Nach Abschluss dieses Vorgangs wir alle Konfigurationsdateien generieren, die Sie benötigen.

Configure your project page

Einrichten eines Mandanten

Richten Sie zu Testzwecken auf Ihrem Mandanten Folgendes ein: mindestens zwei Mitarbeiter, einen Cloudgeräteadministrator und einen globalen Administrator. Legen Sie im Azure-Portal den Cloudgeräteadministrator fest, indem Sie Organisationsrollen ändern. Greifen Sie auf Ihre Organisationsrollen zu, indem Sie Identität>Rollen und Administratoren>Rollen und Administratoren>Alle Rollen und dann Cloudgeräteadministrator auswählen. Fügen Sie die Benutzer hinzu, die ein Gerät in den Modus für gemeinsam genutzte Geräte versetzen können.

Einrichten eines Android-Geräts im gemeinsam genutzten Modus

Herunterladen der Authenticator-App

Laden Sie die Microsoft Authenticator-App aus dem Google Play Store herunter. Wenn Sie die App bereits heruntergeladen haben, sollten Sie sicherstellen, dass es sich um die aktuelle Version handelt.

Einstellungen der Authenticator-App und Registrieren des Geräts in der Cloud

Starten Sie die Authenticator-App, und navigieren Sie zur Hauptseite des Kontos. Wenn die Seite Konto hinzufügen angezeigt wird, können Sie das Gerät für die gemeinsame Nutzung bereitstellen.

Authenticator add account screen

Wechseln Sie in der Menüleiste auf der rechten Seite zum Bereich Einstellungen. Wählen Sie unter Geschäfts-, Schul- oder Unikonten die Option Geräteregistrierung aus.

Authenticator settings screen

Wenn Sie auf diese Schaltfläche klicken, werden Sie aufgefordert, den Zugriff auf die Gerätekontakte zu autorisieren. Der Grund ist die Kontointegration von Android auf dem Gerät. Wählen Sie Zulassen aus.

Authenticator allow access confirmation screen

Der Cloudgeräteadministrator sollte unter Oder als gemeinsam genutztes Gerät registrieren seine geschäftliche E-Mail-Adresse für die Organisation eingeben. Klicken Sie anschließend auf die Schaltfläche Als gemeinsam genutztes Gerät registrieren, und geben Sie Ihre Anmeldeinformationen ein.

Device registration screen in app

App screenshot showing Microsoft sign-in page

Das Gerät befindet sich jetzt im Modus für gemeinsame Nutzung.

App screen showing shared device mode enabled

Alle An- und Abmeldungen auf dem Gerät sind globaler Art. Dies bedeutet, dass sie für alle Apps gelten, die in MSAL und Microsoft Authenticator auf dem Gerät integriert sind. Sie können nun Anwendungen auf dem Gerät bereitstellen, für die Funktionen des Modus für gemeinsam genutzte Geräte verwendet werden.

Anzeigen des gemeinsam genutzten Geräts

Nachdem Sie ein Gerät in den Modus für gemeinsame Nutzung versetzt haben, ist es für Ihre Organisation bekannt und wird im Organisationsmandanten nachverfolgt. Sie können Ihre gemeinsam genutzten Geräte anzeigen, indem Sie sich den Join-Typ ansehen.

Screenshot that shows the all devices pane

Ausführen der Beispiel-App

Die Beispielanwendung ist eine einfache App, mit der die Graph-API Ihrer Organisation aufgerufen wird. Bei der ersten Ausführung werden Sie zum Einwilligen aufgefordert, weil es sich um eine neue Anwendung für Ihr Mitarbeiterkonto handelt.

Application configuration info screen

Nächste Schritte

Hier erfahren Sie mehr über das Arbeiten mit der Microsoft-Authentifizierungsbibliothek und dem Modus für gemeinsam genutzte Geräte auf Android-Geräten: