Esercitazione: Usare la modalità dispositivo condiviso nell'applicazione Android

In questa esercitazione, gli sviluppatori Android e gli amministratori tenant di Microsoft Entra apprendeno il codice, l'app Authenticator e le impostazioni del tenant necessari per abilitare la modalità dispositivo condiviso per un'app Android.

Contenuto dell'esercitazione:

  • Scaricare un esempio di codice
  • Abilitare e rilevare la modalità dispositivo condiviso
  • Rilevare la modalità per account singolo o per più account
  • Rilevare un cambio utente e abilitare l'accesso e la disconnessione globali
  • Configurare il tenant e registrare l'applicazione
  • Configurare un dispositivo Android in modalità dispositivo condiviso
  • Eseguire l'app di esempio

Prerequisiti

Guida per gli sviluppatori

Questa sezione dell'esercitazione offre agli sviluppatori indicazioni utili per implementare la modalità dispositivo condiviso in un'applicazione Android usando Microsoft Authentication Library (MSAL). Vedere l'esercitazione su MSAL per Android per informazioni su come integrare MSAL con l'app Android, connettere un utente, chiamare Microsoft Graph e disconnettere l'utente.

Scaricare l'esempio

Clonare l'applicazione di esempio da GitHub. L'esempio consente di lavorare in modalità per account singolo o per account multipli.

Aggiungere MSAL SDK al repository Maven locale

Se non si usa l'app di esempio, aggiungere la libreria MSAL come dipendenza nel file build.gradle, come segue:

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

Configurare l'app per l'uso della modalità dispositivo condiviso

Per altre informazioni sull'impostazione del file di configurazione, vedere la documentazione sulla configurazione.

Impostare "shared_device_mode_supported" su true nel file di configurazione MSAL.

Se non si prevede di supportare la modalità per account multipli, come nel caso in cui non si usa un dispositivo condiviso e l'utente può accedere all'app con più account nello stesso momento, impostare "account_mode" su "SINGLE". Ciò garantisce che l'app ottenga sempre ISingleAccountPublicClientApplication, semplificando notevolmente l'integrazione di MSAL. Il valore predefinito di "account_mode" è "MULTIPLE", quindi è importante modificare questo valore nel file di configurazione se si usa "single account" la modalità .

Ecco un esempio del file auth_config.json incluso nella directory app>main>res>raw dell'app di esempio:

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

Rilevare la modalità dispositivo condiviso

La modalità dispositivo condiviso consente di configurare i dispositivi Android in modo che vengano condivisi da più dipendenti, fornendo al contempo la gestione del dispositivo supportata da Microsoft Identity. I dipendenti possono accedere ai propri dispositivi e visualizzare rapidamente le informazioni dei clienti. Al termine del turno o dell'attività, sarà possibile disconnettersi da tutte le app nel dispositivo condiviso con un solo clic e il dispositivo sarà immediatamente pronto per l'uso del dipendente successivo.

Usare isSharedDevice() per determinare se un'app è in esecuzione in un dispositivo che è in modalità dispositivo condiviso. L'app può usare questo flag per determinare se l'esperienza utente deve essere modificata di conseguenza.

Ecco un frammento di codice che mostra come è possibile usare isSharedDevice(). È tratto dalla classe SingleAccountModeFragment nell'app di esempio:

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

Inizializzare l'oggetto PublicClientApplication

Se si imposta "account_mode":"SINGLE" nel file di configurazione MSAL, è possibile eseguire il cast sicuro dell'oggetto applicazione restituito come ISingleAccountPublicCLientApplication.

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

Rilevare la modalità per account singolo o per account multipli

Se stai scrivendo un'app che verrà usata solo per i ruoli di lavoro sul campo in un dispositivo condiviso, ti consigliamo di scrivere l'app per supportare solo la modalità account singolo. Questo vale per la maggior parte delle applicazioni incentrate su attività, come le app medicali, le app di fatturazione e quasi tutte le app line-of-business. In questo modo si semplifica lo sviluppo, in quanto molte funzionalità dell'SDK non saranno necessarie.

Se l'app supporta più account e modalità dispositivo condiviso, è necessario eseguire un controllo del tipo ed eseguire il cast all'interfaccia appropriata, come illustrato di seguito.

private IPublicClientApplication mApplication;

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

Ottenere l'utente connesso e determinare se un utente è cambiato nel dispositivo

Il metodo loadAccount recupera l'account dell'utente che ha eseguito l'accesso. Il metodo onAccountChanged determina se l'utente connesso è cambiato e, in tal caso, esegue la pulizia:

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

Connettere un utente a livello globale

Il codice seguente connette un utente attraverso il dispositivo ad altre app che usano MSAL con l'app Authenticator:

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

Disconnettere un utente a livello globale

Il codice seguente rimuove l'account connesso e cancella i token memorizzati nella cache non solo dall'app, ma anche dal dispositivo in modalità dispositivo condiviso:

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

Ricevere la trasmissione per rilevare la disconnessa globale avviata da altre applicazioni

Per ricevere la trasmissione delle modifiche dell'account, è necessario registrare un ricevitore di trasmissione. È consigliabile registrare il ricevitore di trasmissione tramite i ricevitori registrati dal contesto.

Quando viene ricevuta una trasmissione di modifiche dell'account, ottenere immediatamente l'utente connesso e determinare se un utente è cambiato nel dispositivo. Se viene rilevata una modifica, avviare la pulizia dei dati per l'account connesso in precedenza. È consigliabile arrestare correttamente le operazioni ed eseguire la pulizia dei dati.

Il frammento di codice seguente mostra come registrare un ricevitore di trasmissione.

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

Guida dell'amministratore

I passaggi seguenti descrivono la configurazione dell'applicazione e l'inserimento del dispositivo in modalità dispositivo condiviso.

Registrare l'applicazione

Prima di tutto, registrare l'applicazione all'interno del tenant aziendale. Quindi fornire i valori indicati di seguito nel file auth_config.json per consentire la corretta esecuzione dell'applicazione.

Per informazioni sula procedura, vedere Registrare l'applicazione.

Nota

Per registrare l'app, usare la guida di avvio rapido sul lato sinistro e quindi selezionare Android. Si aprirà una pagina in cui si dovranno compilare i campi Nome pacchetto e Hash della firma per l'app. Questi valori sono molto importanti per assicurare la corretta configurazione dell'app. Si riceverà quindi un oggetto di configurazione per l'app da tagliare e incollare nel file auth_config.json.

Configure your Android app page

Selezionare Apporta questa modifica per me e quindi specificare i valori che la guida introduttiva richiede. Al termine, verranno generati tutti i file di configurazione necessari.

Configure your project page

Configurare un tenant

A scopo di test, configurare nel tenant almeno due dipendenti, un amministratore dispositivo cloud e un amministratore globale. Impostare l'Amministrazione istrator del dispositivo cloud modificando i ruoli dell'organizzazione. Accedere ai ruoli dell'organizzazione selezionando Ruoli di identità>e amministratori Ruoli e amministratori>Tutti i>ruoli e quindi selezionare Cloud Device Amministrazione istrator. Aggiungere gli utenti autorizzati a impostare un dispositivo in modalità condivisa.

Configurare un dispositivo Android in modalità condivisa

Scaricare l'app Authenticator

Scaricare l'app Microsoft Authenticator da Google Play Store. Se l'app è già stata scaricata, assicurarsi che sia la versione più recente.

Impostazioni dell'app Authenticator e registrazione del dispositivo nel cloud

Avviare l'app Authenticator e passare alla pagina dell'account principale. Quando viene visualizzata la pagina Aggiungi account, si è pronti per impostare il dispositivo in modalità condivisa.

Authenticator add account screen

Passare al riquadro Impostazioni usando la barra dei menu a destra. Selezionare Registrazione del dispositivo in Account aziendale o dell'istituto di istruzione.

Authenticator settings screen

Quando si fa clic su questo pulsante, viene chiesto di autorizzare l'accesso ai contatti del dispositivo. Questa richiesta è dovuta all'integrazione dell'account di Android nel dispositivo. Scegliere Consenti.

Authenticator allow access confirmation screen

L'amministratore dispositivo cloud deve immettere il proprio indirizzo di posta elettronica aziendale in In alternativa, eseguire la registrazione come dispositivo condiviso. Fare quindi clic sul pulsante Registra come dispositivo condiviso e immettere le credenziali.

Device registration screen in app

App screenshot showing Microsoft sign-in page

Il dispositivo è ora in modalità condivisa.

App screen showing shared device mode enabled

Tutti gli accessi e le disconnessioni nel dispositivo avvengono a livello globale, ossia si applicano a tutte le app integrate con MSAL e Microsoft Authenticator nel dispositivo. È ora possibile distribuire nel dispositivo applicazioni che usano funzionalità in modalità dispositivo condiviso.

Visualizzare il dispositivo condiviso

Dopo che un dispositivo è stato impostato in modalità condivisa, diventa noto all'organizzazione e ne viene tenuta traccia nel tenant dell'organizzazione. È possibile visualizzare i dispositivi condivisi esaminando il tipo di join.

Screenshot that shows the all devices pane

Esecuzione dell'app di esempio

L'applicazione di esempio è un'app semplice che chiama l'API Graph dell'organizzazione. Al primo avvio, verrà richiesto di fornire il consenso perché l'applicazione non è una novità dell'account dipendente.

Application configuration info screen

Passaggi successivi

Altre informazioni sull'uso di Microsoft Authentication Library e della modalità dispositivo condiviso in dispositivi Android: