Läge för delad enhet för Android-enheter

Medarbetare i frontlinjen som butiksanställda, flygbesättningsmedlemmar och fältservice arbetare använder ofta en delad mobil enhet för att utföra sitt arbete. Dessa delade enheter kan innebära säkerhetsrisker om användarna delar sina lösenord eller PIN-koder avsiktligt eller inte för att få åtkomst till kund- och affärsdata på den delade enheten.

Med läget För delad enhet kan du konfigurera en Android 8.0-enhet eller en högre enhet så att anställda kan dela enheten på ett säkert sätt. Anställda kan logga in en gång och få enkel inloggning (SSO) till alla appar som stöder den här funktionen, vilket ger dem snabbare åtkomst till information. När anställda loggar ut efter att ha slutfört sitt skift eller sin uppgift loggas de automatiskt ut från enheten och alla program som stöds, vilket gör enheten redo för nästa användare.

För att dra nytta av funktionen För delat enhetsläge arbetar apputvecklare och molnenhetsadministratörer tillsammans:

  1. Enhetsadministratörer förbereder enheten så att den delas manuellt eller med hjälp av en MDM-provider (hantering av mobila enheter) som Microsoft Intune. Det föredragna alternativet är att använda en MDM eftersom det tillåter enhetskonfigurationen i delat enhetsläge i stor skala via zero-touch-etablering. MDM skickar Microsoft Authenticator-appen till enheterna och aktiverar "Delat läge" för varje enhet via en hanterad konfigurationsuppdatering till enheten. Den här inställningen för delat läge är det som ändrar beteendet för de appar som stöds på enheten. Den här konfigurationen från MDM-providern anger läget för delad enhet för enheten och utlöser registrering av delad enhet med hjälp av Authenticator-appen.

  2. Programutvecklare skriver en app med ett enda konto (appar med flera konton stöds inte i läget för delad enhet) för att hantera följande scenario:

    • Logga in en användare på hela enheten via alla program som stöds
    • Logga ut en användare i hela enheten via alla program som stöds
    • Fråga enhetens tillstånd för att avgöra om programmet finns på en enhet som är i delat enhetsläge
    • Fråga användarens enhetstillstånd för att fastställa eventuella ändringar i programmet sedan den senaste användningen

    Stöd för läget för delad enhet bör betraktas som en funktionsuppgradering för ditt program och kan bidra till att öka dess införande i miljöer där samma enhet används bland flera användare.

    Viktigt!

    Microsoft-program som har stöd för delat enhetsläge på Android kräver inga ändringar och behöver bara installeras på enheten för att få de fördelar som följer med delat enhetsläge.

Konfigurera enheten i läget Delad enhet

Om du vill konfigurera din Android-enhet så att den stöder delat enhetsläge bör den köra Android OS 8.0 eller senare. Enheten bör också rensas genom fabriksåterställning eller så ska alla Microsoft- och andra aktiverade appar i delat enhetsläge avinstalleras och installeras om.

Microsoft Intune stöder zero-touch-etablering för enheter i delat Enhetsläge i Microsoft Entra, vilket innebär att enheten kan konfigureras och registreras i Intune med minimal interaktion från frontlinjearbetaren. Information om hur du konfigurerar enheten i läget för delad enhet när du använder Microsoft Intune som MDM finns i Konfigurera registrering för enheter i delat Enhetsläge i Microsoft Entra.

Ändra ditt Android-program så att det stöder läget för delad enhet

Användarna är beroende av dig för att se till att deras data inte läcker ut till en annan användare. Följande avsnitt innehåller användbara signaler för att indikera för ditt program att en ändring har inträffat och bör hanteras. Du ansvarar för att kontrollera användarens tillstånd på enheten varje gång appen används och sedan rensa den tidigare användarens data. Detta inkluderar om det läses in igen från bakgrunden i multi-tasking. Vid en användarändring bör du se till att både den tidigare användarens data rensas och att alla cachelagrade data som visas i programmet tas bort. Vi rekommenderar starkt att du och ditt företag genomför en säkerhetsgranskningsprocess efter att ha uppdaterat din app för att stödja läget för delad enhet.

Lägg till Microsoft Authentication Library (MSAL) SDK i programmets beroenden

Lägg till MSAL-biblioteket som ett beroende i filen build.gradle, så här:

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

Konfigurera appen så att den använder läget delad enhet

Program som skrivits med Microsoft Authentication Library (MSAL) SDK kan hantera ett enda konto eller flera konton. Mer information finns i läget för ett enskilt konto eller läget för flera konton. Appar för delat enhetsläge fungerar bara i läge med ett enda konto.

Om du inte planerar att stödja läget för flera konton anger du "account_mode" till "SINGLE" i msal-konfigurationsfilen. Detta garanterar att din app alltid får ISingleAccountPublicClientApplicationoch avsevärt förenklar MSAL-integreringen. Standardvärdet "account_mode" för är "MULTIPLE", så det är viktigt att ändra det här värdet i konfigurationsfilen om du använder "single account" läge.

Här är ett exempel på konfigurationsfilen:

{
  "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"
      }
    }
  ]
}

Mer information om hur du konfigurerar konfigurationsfilen finns i konfigurationsdokumentationen.

Stöd för både ett konto och flera konton

Din app kan skapas för att stödja körning på både personliga enheter och delade enheter. Om din app för närvarande har stöd för flera konton och du vill ha stöd för läget för delad enhet lägger du till stöd för ett kontoläge.

Du kan också vilja att appen ändrar sitt beteende beroende på vilken typ av enhet den körs på. Använd ISingleAccountPublicClientApplication.isSharedDevice() för att avgöra när du ska köra i enkontoläge.

Det finns två olika gränssnitt som representerar vilken typ av enhet programmet är på. När du begär en programinstans från MSAL:s programfabrik tillhandahålls rätt programobjekt automatiskt.

Följande objektmodell illustrerar vilken typ av objekt du kan få och vad det innebär i kontexten för en delad enhet:

arvsmodell för offentliga klientprogram

Du måste göra en typkontroll och casta till rätt gränssnitt när du hämtar objektet PublicClientApplication . Följande kod söker efter flera kontolägen eller enskilda kontolägen och omvandlar programobjektet på rätt sätt:

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

Följande skillnader gäller beroende på om din app körs på en delad eller personlig enhet:

Enhet för delat läge Personlig enhet
Konton Enskilt konto Flera konton
Inloggning Global Global
Logga ut Global Varje program kan styra om utloggningen är lokal för appen.
Kontotyper som stöds Endast arbetskonton Personliga konton och arbetskonton stöds

Initiera PublicClientApplication-objektet

Om du anger "account_mode":"SINGLE" i MSAL-konfigurationsfilen kan du på ett säkert sätt omvandla det returnerade programobjektet som en 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 */
        }
    });

Identifiera läget för delad enhet

Det är viktigt att identifiera läget för delad enhet för ditt program. Många program kräver en ändring i användarupplevelsen (UX) när programmet används på en delad enhet. Ditt program kan till exempel ha en "registreringsfunktion", vilket inte är lämpligt för en frontlinjearbetare eftersom de förmodligen redan har ett konto. Du kanske också vill lägga till extra säkerhet i programmets hantering av data om det är i läget för delad enhet.

Använd API:et isSharedDevice IPublicClientApplication i för att avgöra om en app körs på en enhet i läget delad enhet.

Följande kodfragment visar exempel på användning av API:et isSharedDevice .

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

Hämta den inloggade användaren och ta reda på om en användare har ändrats på enheten

En annan viktig del av stöd för läget för delad enhet är att fastställa användarens tillstånd på enheten och rensa programdata om en användare har ändrats eller om det inte finns någon användare alls på enheten. Du ansvarar för att se till att data inte läcker ut till en annan användare.

Du kan använda getCurrentAccountAsync API:et för att fråga det inloggade kontot på enheten.

Metoden loadAccount hämtar kontot för den inloggade användaren. Metoden onAccountChanged avgör om den inloggade användaren har ändrats och i så fall rensar du upp:

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

Logga in en användare globalt

När en enhet har konfigurerats som en delad enhet kan ditt program anropa API:et signIn för att logga in på kontot. Kontot kommer att vara tillgängligt globalt för alla berättigade appar på enheten efter att den första appen har loggat in på kontot.

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

Logga ut en användare globalt

Följande kod tar bort det inloggade kontot och rensar cachelagrade token från inte bara appen, utan även från enheten som är i läget för delad enhet. Det rensar dock inte data från ditt program. Du måste rensa data från ditt program och rensa alla cachelagrade data som ditt program kan visa för användaren.

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

Ta emot sändning för att identifiera global utloggning som initierats från andra program

Om du vill ta emot kontoändringssändningen måste du registrera en sändningsmottagare. Vi rekommenderar att du registrerar sändningsmottagaren via de kontextregistrerade mottagarna.

När en sändning av kontoändring tas emot hämtar du omedelbart den inloggade användaren och avgör om en användare har ändrats på enheten. Om en ändring identifieras initierar du datarensning för tidigare inloggade konton. Vi rekommenderar att du stoppar alla åtgärder och rensar data korrekt.

Följande kodfragment visar hur du kan registrera en sändningsmottagare.

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

Microsoft-program som stöder delat enhetsläge

Dessa Microsoft-program stöder microsoft entra-läget för delad enhet:

MdM:er från tredje part som stöder läget för delad enhet

Dessa MDM-leverantörer (Mobile Enhetshantering) från tredje part stöder microsoft entra-läget för delad enhet:

Utloggning av delad enhet och den övergripande applivscykeln

När en användare loggar ut måste du vidta åtgärder för att skydda användarens sekretess och data. Om du till exempel skapar en app för medicinska journaler vill du se till att patientjournalerna rensas när användaren loggar ut tidigare. Ditt program måste vara förberett för datasekretess och kontrollera varje gång det går in i förgrunden.

När din app använder MSAL för att logga ut användaren i en app som körs på en enhet som är i delat läge, tas det inloggade kontot och cachelagrade token bort från både appen och enheten.

Följande diagram visar den övergripande applivscykeln och vanliga händelser som kan inträffa när appen körs. Diagrammet omfattar från den tidpunkt då en aktivitet startas, loggar in och loggar ut ett konto och hur händelser som att pausa, återuppta och stoppa aktiviteten passar in.

Livscykel för delad enhetsapp

Nästa steg

Konfigurera en Android-enhet för att köra appar i delat enhetsläge och testa din app.

Läget Delad enhet för Android-enheter