Udostępnij za pośrednictwem


Tryb udostępnionego urządzenia dla urządzeń z systemem Android

Pracownicy pierwszej linii, tacy jak pracownicy detaliczni, członkowie załogi lotów i pracownicy usługa terenowa często używają udostępnionego urządzenia przenośnego do wykonywania swojej pracy. Te udostępnione urządzenia mogą stanowić zagrożenie bezpieczeństwa, jeśli użytkownicy udostępniają swoje hasła lub numery PIN, celowo lub nie, aby uzyskać dostęp do danych klientów i firm na udostępnionym urządzeniu.

Tryb urządzenia udostępnionego umożliwia skonfigurowanie urządzenia z systemem Android 8.0 lub nowszym, tak aby pracownicy mogli bezpiecznie udostępniać urządzenie. Pracownicy mogą logować się raz i uzyskiwać logowanie jednokrotne do wszystkich aplikacji, które obsługują tę funkcję, zapewniając im szybszy dostęp do informacji. Gdy pracownicy wylogowują się po zakończeniu zmiany lub zadania, automatycznie wylogowują się z urządzenia i wszystkich obsługiwanych aplikacji, dzięki czemu urządzenie będzie gotowe dla następnego użytkownika.

Aby korzystać z funkcji Tryb urządzenia udostępnionego, deweloperzy aplikacji i administratorzy urządzeń w chmurze współpracują ze sobą:

  1. Administratorzy urządzeń przygotowują urządzenie do udostępniania ręcznie lub przy użyciu dostawcy zarządzania urządzeniami przenośnymi (MDM), takiego jak Microsoft Intune. Preferowaną opcją jest użycie rozwiązania MDM, ponieważ umożliwia skonfigurowanie urządzenia w trybie urządzenia udostępnionego na dużą skalę za pośrednictwem bezobsługowej aprowizacji. Rozwiązanie MDM wypycha aplikację Microsoft Authenticator na urządzenia i włącza tryb współużytkowany dla każdego urządzenia za pomocą zarządzanej aktualizacji konfiguracji do urządzenia. To ustawienie Trybu udostępnionego zmienia zachowanie obsługiwanych aplikacji na urządzeniu. Ta konfiguracja od dostawcy MDM ustawia tryb urządzenia udostępnionego dla urządzenia i wyzwala rejestrację urządzenia udostępnionego przy użyciu aplikacji Authenticator.

  2. Deweloperzy aplikacji piszą aplikację z jednym kontem (aplikacje z wieloma kontami nie są obsługiwane w trybie urządzenia udostępnionego) w celu obsługi następującego scenariusza:

    • Logowanie użytkownika na całym urządzeniu za pośrednictwem dowolnej obsługiwanej aplikacji
    • Wyloguj użytkownika na całym urządzeniu za pomocą dowolnej obsługiwanej aplikacji
    • Wykonaj zapytanie dotyczące stanu urządzenia, aby określić, czy aplikacja znajduje się na urządzeniu w trybie urządzenia udostępnionego
    • Wykonaj zapytanie dotyczące stanu urządzenia użytkownika, aby określić wszelkie zmiany w aplikacji od czasu ostatniego użycia

    Obsługa trybu udostępnionego urządzenia powinna być traktowana jako uaktualnienie funkcji dla aplikacji i może pomóc zwiększyć jego wdrażanie w środowiskach, w których to samo urządzenie jest używane przez wielu użytkowników.

    Ważne

    Aplikacje firmy Microsoft, które obsługują tryb udostępnionego urządzenia w systemie Android, nie wymagają żadnych zmian i muszą być zainstalowane na urządzeniu, aby uzyskać korzyści wynikające z trybu udostępnionego urządzenia.

Konfigurowanie urządzenia w trybie urządzenia udostępnionego

Aby skonfigurować urządzenie z systemem Android do obsługi trybu udostępnionego urządzenia, powinien on działać z systemem Android OS 8.0 lub nowszym. Urządzenie powinno zostać również wyczyszczone przez zresetowanie do ustawień fabrycznych lub odinstalowanie i ponowne zainstalowanie wszystkich aplikacji z włączonym trybem urządzenia udostępnionego firmy Microsoft i innych trybów urządzeń udostępnionych.

Usługa Microsoft Intune obsługuje aprowizację bezobsługową dla urządzeń w trybie udostępnionego urządzenia Firmy Microsoft Entra, co oznacza, że urządzenie można skonfigurować i zarejestrować w usłudze Intune przy minimalnej interakcji z procesem roboczym pierwszej linii. Aby skonfigurować urządzenie w trybie urządzenia udostępnionego w przypadku korzystania z usługi Microsoft Intune jako rozwiązania MDM, zobacz Konfigurowanie rejestracji dla urządzeń w trybie udostępnionego urządzenia firmy Microsoft Entra.

Modyfikowanie aplikacji systemu Android w celu obsługi trybu udostępnionego urządzenia

Użytkownicy zależą od Ciebie, aby upewnić się, że ich dane nie wyciekły do innego użytkownika. Poniższe sekcje zawierają przydatne sygnały wskazujące aplikację, że nastąpiła zmiana i powinna zostać obsłużona. Odpowiadasz za sprawdzanie stanu użytkownika na urządzeniu za każdym razem, gdy aplikacja jest używana, a następnie czyszcząc dane poprzedniego użytkownika. Obejmuje to ponowne załadowanie z tła w wielu zadaniach. W przypadku zmiany użytkownika należy upewnić się, że zarówno dane poprzedniego użytkownika są czyszczone, jak i że wszystkie buforowane dane wyświetlane w aplikacji zostaną usunięte. Zdecydowanie zalecamy, aby firma przeprowadziła proces przeglądu zabezpieczeń po zaktualizowaniu aplikacji w celu obsługi trybu udostępnionego urządzenia.

Dodawanie zestawu SDK biblioteki Microsoft Authentication Library (MSAL) do zależności aplikacji

Dodaj bibliotekę MSAL jako zależność w pliku build.gradle, w następujący sposób:

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

Konfigurowanie aplikacji do korzystania z trybu udostępnionego urządzenia

Aplikacje napisane przy użyciu zestawu SDK biblioteki Microsoft Authentication Library (MSAL) mogą zarządzać jednym kontem lub wieloma kontami. Aby uzyskać szczegółowe informacje, zobacz tryb pojedynczego konta lub tryb wielu kont. Aplikacje w trybie urządzenia udostępnionego działają tylko w trybie pojedynczego konta.

Jeśli nie planujesz obsługi trybu wielu kont, ustaw wartość na "account_mode" "SINGLE" w pliku konfiguracji msal. Gwarantuje to, że aplikacja będzie zawsze otrzymywać ISingleAccountPublicClientApplicationpliki i znacznie upraszcza integrację biblioteki MSAL. Wartość "account_mode" domyślna to "MULTIPLE", dlatego ważne jest, aby zmienić tę wartość w pliku konfiguracji, jeśli używasz "single account" trybu.

Oto przykład pliku konfiguracji:

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

Zapoznaj się z dokumentacją konfiguracji, aby uzyskać więcej informacji na temat konfigurowania pliku konfiguracji.

Obsługa zarówno jednego konta, jak i wielu kont

Aplikację można utworzyć w celu obsługi uruchamiania zarówno na urządzeniach osobistych, jak i na urządzeniach udostępnionych. Jeśli aplikacja obecnie obsługuje wiele kont i chcesz obsługiwać tryb urządzenia udostępnionego, dodaj obsługę trybu pojedynczego konta.

Możesz również chcieć, aby aplikacja zmieniła swoje zachowanie w zależności od typu urządzenia, na którym jest uruchomiona. Użyj ISingleAccountPublicClientApplication.isSharedDevice() polecenia , aby określić, kiedy należy uruchomić w trybie pojedynczego konta.

Istnieją dwa różne interfejsy reprezentujące typ urządzenia, na których znajduje się aplikacja. Gdy zażądasz wystąpienia aplikacji z fabryki aplikacji biblioteki MSAL, prawidłowy obiekt aplikacji jest udostępniany automatycznie.

Poniższy model obiektów ilustruje typ obiektu, który może zostać odebrany i co oznacza w kontekście urządzenia udostępnionego:

model dziedziczenia aplikacji klienckiej publicznej

Podczas pobierania obiektu należy sprawdzić typ i rzutować go do odpowiedniego interfejsu PublicClientApplication . Poniższy kod sprawdza wiele trybów konta lub trybów pojedynczego konta i odpowiednio rzutuje obiekt aplikacji:

private IPublicClientApplication mApplication;

        // Running in personal-device mode?
        if (mApplication instanceOf IMultipleAccountPublicClientApplication) {
          IMultipleAccountPublicClientApplication multipleAccountApplication = (IMultipleAccountPublicClientApplication) mApplication;
          ...
        // Running in shared-device mode?
        } else if (mApplication instanceOf ISingleAccountPublicClientApplication) {
           ISingleAccountPublicClientApplication singleAccountApplication = (ISingleAccountPublicClientApplication) mApplication;
            ...
        }

Następujące różnice mają zastosowanie w zależności od tego, czy aplikacja jest uruchomiona na urządzeniu udostępnionym, czy osobistym:

Urządzenie w trybie udostępnionym Urządzenie osobiste
Klienci Jedno konto Wiele kont
Logowanie Globalnie Globalnie
Wylogowywanie Globalnie Każda aplikacja może kontrolować, czy wylogowywanie jest lokalne w aplikacji.
Obsługiwane typy kont Tylko konta służbowe Obsługiwane konta osobiste i służbowe

Inicjowanie obiektu PublicClientApplication

Jeśli ustawisz "account_mode":"SINGLE" w pliku konfiguracji biblioteki MSAL, możesz bezpiecznie rzutować zwrócony obiekt aplikacji jako ISingleAccountPublicCLientApplication.

private ISingleAccountPublicClientApplication mSingleAccountApp;

PublicClientApplication.create(
    this.getApplicationCOntext(),
    R.raw.auth_config_single_account,
    new PublicClientApplication.ApplicationCreatedListener() {

        @Override
        public void onCreated(IPublicClientApplication application){
            mSingleAccountApp = (ISingleAccountPublicClientApplication)application;
        }

        @Override
        public void onError(MsalException exception){
            /*Fail to initialize PublicClientApplication */
        }
    });

Wykrywanie trybu udostępnionego urządzenia

Wykrywanie trybu udostępnionego urządzenia jest ważne dla aplikacji. Wiele aplikacji wymaga zmiany środowiska użytkownika (UX), gdy aplikacja jest używana na urządzeniu udostępnionym. Na przykład aplikacja może mieć funkcję "Zarejestruj się", która nie jest odpowiednia dla procesu roboczego linii frontu, ponieważ prawdopodobnie ma już konto. Możesz również dodać dodatkowe zabezpieczenia do obsługi danych przez aplikację, jeśli są w trybie urządzenia udostępnionego.

Użyj interfejsu isSharedDevice API w elemecie IPublicClientApplication , aby określić, czy aplikacja jest uruchomiona na urządzeniu w trybie urządzenia udostępnionego.

Poniższe fragmenty kodu pokazują przykłady użycia interfejsu isSharedDevice API.

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

Pobierz zalogowanego użytkownika i ustal, czy użytkownik zmienił się na urządzeniu

Inną ważną częścią obsługi trybu udostępnionego urządzenia jest określenie stanu użytkownika na urządzeniu i wyczyszczenie danych aplikacji, jeśli użytkownik uległ zmianie lub jeśli na urządzeniu nie ma żadnego użytkownika. Odpowiadasz za zapewnienie, że dane nie wyciekły do innego użytkownika.

Interfejs API umożliwia getCurrentAccountAsync wykonywanie zapytań dotyczących aktualnie zalogowanego konta na urządzeniu.

Metoda loadAccount pobiera konto zalogowanego użytkownika. Metoda onAccountChanged określa, czy zalogowany użytkownik uległ zmianie, a jeśli tak, wyczyść:

private void loadAccount()
{
  mSingleAccountApp.getCurrentAccountAsync(new ISingleAccountPublicClientApplication.CurrentAccountCallback())
  {
    @Override
    public void onAccountLoaded(@Nullable IAccount activeAccount)
    {
      if (activeAccount != null)
      {
        signedInUser = activeAccount;
        final AcquireTokenSilentParameters silentParameters = new AcquireTokenSilentParameters.Builder()
                        .fromAuthority(signedInUser.getAuthority())
                        .forAccount(signedInUser)
                        .withScopes(Arrays.asList(getScopes()))
                        .withCallback(getAuthSilentCallback())
                        .build();
        mSingleAccountApp.acquireTokenSilentAsync(silentParameters);
      }
    }
    @Override
    public void onAccountChanged(@Nullable IAccount priorAccount, @Nullable Iaccount currentAccount)
    {
      if (currentAccount == null)
      {
        //Perform a cleanup task as the signed-in account changed.
        cleaUp();
      }
    }
    @Override
    public void onError(@NonNull Exception exception)
    {
        //getCurrentAccountAsync failed
    }
  }
}

Globalne logowanie użytkownika

Po skonfigurowaniu urządzenia jako urządzenia udostępnionego aplikacja może wywołać signIn interfejs API w celu zalogowania się na koncie. Konto będzie dostępne globalnie dla wszystkich kwalifikujących się aplikacji na urządzeniu po pierwszym zalogowaniu się na koncie.

final SignInParameters signInParameters = ... /* create SignInParameters object */
mSingleAccountApp.signIn(signInParameters);

Globalnie wyloguj użytkownika

Poniższy kod usuwa zalogowane konto i czyści buforowane tokeny nie tylko z aplikacji, ale także z urządzenia, które jest w trybie urządzenia udostępnionego. Nie powoduje to jednak wyczyszczenia danych z aplikacji. Musisz wyczyścić dane z aplikacji i wyczyścić wszystkie buforowane dane, które aplikacja może wyświetlać użytkownikowi.

mSingleAccountApp.signOut(new ISingleAccountPublicClientApplication.SignOutCallback() {
    @Override
    public void onSignOut() {
        // clear data from your application
    }

    @Override
    public void onError(@NonNull MsalException exception) {
        // signout failed, show error
    }
});

Odbieranie emisji w celu wykrywania globalnego wylogowania zainicjowanego z innych aplikacji

Aby odebrać emisję zmiany konta, należy zarejestrować odbiornik emisji. Zaleca się zarejestrowanie odbiornika emisji za pośrednictwem odbiorników zarejestrowanych w kontekście.

Po odebraniu emisji zmiany konta natychmiast uzyskaj zalogowanego użytkownika i ustal, czy użytkownik zmienił się na urządzeniu. Jeśli zostanie wykryta zmiana, zainicjuj czyszczenie danych dla wcześniej zalogowanego konta. Zaleca się prawidłowe zatrzymywanie wszystkich operacji i czyszczenie danych.

Poniższy fragment kodu pokazuje, jak można zarejestrować odbiornik emisji.

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);
}

Aplikacje firmy Microsoft obsługujące tryb urządzenia udostępnionego

Te aplikacje firmy Microsoft obsługują tryb urządzenia udostępnionego firmy Microsoft Entra:

MdM innych firm, które obsługują tryb udostępnionego urządzenia

Ci zewnętrzni dostawcy usługi Mobile Zarządzanie urządzeniami (MDM) obsługują tryb urządzenia udostępnionego firmy Microsoft Entra:

Wylogowywanie urządzenia udostępnionego i ogólny cykl życia aplikacji

Po wylogowaniu się użytkownika należy podjąć działania w celu ochrony prywatności i danych użytkownika. Jeśli na przykład tworzysz aplikację dokumentacji medycznej, chcesz upewnić się, że gdy użytkownik wyjedzie wcześniej wyświetlane rekordy pacjentów, zostaną wyczyszczone. Aplikacja musi być przygotowana na ochronę prywatności danych i sprawdzać ją za każdym razem, gdy wchodzi na pierwszy plan.

Gdy aplikacja używa biblioteki MSAL do wylogowania użytkownika w aplikacji uruchomionej na urządzeniu w trybie udostępnionym, zalogowane konto i buforowane tokeny zostaną usunięte zarówno z aplikacji, jak i z urządzenia.

Na poniższym diagramie przedstawiono ogólny cykl życia aplikacji i typowe zdarzenia, które mogą wystąpić podczas uruchamiania aplikacji. Diagram obejmuje czas uruchamiania działania, logowania i wylogowywanie konta oraz informacje o tym, w jaki sposób zdarzenia, takie jak wstrzymanie, wznawianie i zatrzymywanie działania.

Cykl życia aplikacji udostępnionego urządzenia

Następne kroki

Skonfiguruj urządzenie z systemem Android do uruchamiania aplikacji w trybie urządzenia udostępnionego i przetestuj aplikację.

Tryb urządzenia udostępnionego dla urządzeń z systemem Android