Configurare le opzioni di autenticazione in un'app Android usando Azure AD B2C

Questo articolo descrive come abilitare, personalizzare e migliorare l'esperienza di autenticazione di Azure Active Directory B2C (Azure AD B2C) per l'applicazione Android.

Prima di iniziare, acquisire familiarità con gli articoli seguenti:

Usare un dominio personalizzato

Usando un dominio personalizzato, è possibile personalizzare completamente l'URL di autenticazione. Dal punto di vista dell'utente, gli utenti rimangono nel dominio durante il processo di autenticazione, anziché essere reindirizzati al nome di dominio di Azure AD B2C b2clogin.com.

Per rimuovere tutti i riferimenti a "b2c" nell'URL, è anche possibile sostituire il nome del tenant B2C, contoso.onmicrosoft.com, nell'URL della richiesta di autenticazione con il GUID dell'ID tenant. Ad esempio, è possibile passare https://fabrikamb2c.b2clogin.com/contoso.onmicrosoft.com/ a https://account.contosobank.co.uk/<tenant ID GUID>/.

Per usare un dominio personalizzato e l'ID tenant nell'URL di autenticazione, seguire le indicazioni in Abilitare domini personalizzati. Cercare microsoft Authentication Library (oggetto di configurazione MSAL) e quindi aggiornare le autorità con il nome di dominio personalizzato e l'ID tenant.

Il codice Kotlin seguente mostra l'oggetto config MSAL prima della modifica:

val parameters = AcquireTokenParameters.Builder()
        .startAuthorizationFromActivity(activity)
        .fromAuthority("https://contoso.b2clogin.com/fabrikamb2c.contoso.com/B2C_1_susi")
        // More settings here
        .build()

b2cApp!!.acquireToken(parameters)

Il codice Kotlin seguente mostra l'oggetto config MSAL dopo la modifica:

val parameters = AcquireTokenParameters.Builder()
        .startAuthorizationFromActivity(activity)
        .fromAuthority("https://custom.domain.com/00000000-0000-0000-0000-000000000000/B2C_1_susi")
        // More settings here
        .build()

b2cApp!!.acquireToken(parameters)

Precompilare il nome di accesso

Durante un percorso utente di accesso, l'app potrebbe avere come destinazione un utente specifico. Quando un'app è destinata a un utente, può specificare nella richiesta di autorizzazione il login_hint parametro di query con il nome di accesso dell'utente. Azure AD B2C popola automaticamente il nome di accesso e l'utente deve fornire solo la password.

Per prepopopolare il nome di accesso, eseguire le operazioni seguenti:

  1. Se si usa un criterio personalizzato, aggiungere l'attestazione di input necessaria, come descritto in Configurare l'accesso diretto.
  2. Cercare l'oggetto di configurazione MSAL e quindi aggiungere il withLoginHint() metodo con l'hint di accesso.
val parameters = AcquireTokenParameters.Builder()
    .startAuthorizationFromActivity(activity)
    .withLoginHint("bob@contoso.com") 
    // More settings here
    .build()

b2cApp!!.acquireToken(parameters)

Pre-selezionare un provider di identità

Se la procedura di accesso per l'applicazione è stata configurata per includere gli account di social networking, ad esempio Facebook, LinkedIn o Google, è possibile specificare il parametro domain_hint. Questo parametro di query fornisce un hint ad Azure AD B2C sul provider di identità di social networking che deve essere usato per l'accesso. Ad esempio, se l'applicazione specifica domain_hint=facebook.com, il flusso di accesso passa direttamente alla pagina di accesso di Facebook.

Per reindirizzare gli utenti a un provider di identità esterno, eseguire le operazioni seguenti:

  1. Controllare il nome di dominio del provider di identità esterno. Per altre informazioni, vedere Reindirizzare l'accesso a un provider di social networking.
  2. Creare o usare un oggetto elenco esistente per archiviare parametri di query aggiuntivi.
  3. Aggiungere il domain_hint parametro con il nome di dominio corrispondente all'elenco , ad esempio facebook.com.
  4. Passare l'elenco di parametri di query aggiuntivi nel metodo dell'oggetto di withAuthorizationQueryStringParameters configurazione MSAL.
val extraQueryParameters: MutableList<Pair<String, String>> = ArrayList()
extraQueryParameters.add(Pair("domain_hint", "facebook.com"))

val parameters = AcquireTokenParameters.Builder()
    .startAuthorizationFromActivity(activity)
    .withAuthorizationQueryStringParameters(extraQueryParameters) 
    // More settings here
    .build()

b2cApp!!.acquireToken(parameters)

Specificare la lingua dell'interfaccia utente

La personalizzazione della lingua in Azure AD B2C consente al flusso utente di soddisfare diverse lingue in base alle esigenze dei clienti. Per altre informazioni, vedere Personalizzazione della lingua.

Per impostare la lingua preferita, eseguire le operazioni seguenti:

  1. Configurare la personalizzazione della lingua.
  2. Creare o usare un oggetto elenco esistente per archiviare parametri di query aggiuntivi.
  3. Aggiungere il ui_locales parametro con il codice di lingua corrispondente all'elenco , ad esempio en-us.
  4. Passare l'elenco di parametri di query aggiuntivi nel metodo dell'oggetto di withAuthorizationQueryStringParameters configurazione MSAL.
val extraQueryParameters: MutableList<Map.Entry<String, String>> = ArrayList()

val mapEntry   = object : Map.Entry<String, String> {
      override val key: String = "ui_locales"
      override val value: String = "en-us"
    }   
    
extraQueryParameters.add(mapEntry )

val parameters = AcquireTokenParameters.Builder()
    .startAuthorizationFromActivity(activity)
    .withAuthorizationQueryStringParameters(extraQueryParameters) 
    // More settings here
    .build()

b2cApp!!.acquireToken(parameters)

Passare un parametro di stringa di query personalizzato

Con i criteri personalizzati, è possibile passare un parametro di stringa di query personalizzato. Un buon esempio di caso d'uso è quando si vuole modificare dinamicamente il contenuto della pagina.

Per passare un parametro di stringa di query personalizzato, eseguire le operazioni seguenti:

  1. Configurare l'elemento ContentDefinitionParameters .
  2. Creare o usare un oggetto elenco esistente per archiviare parametri di query aggiuntivi.
  3. Aggiungere il parametro della stringa di query personalizzata, ad esempio campaignId. Impostare il valore del parametro , germany-promotionad esempio .
  4. Passare l'elenco di parametri di query aggiuntivi nel metodo dell'oggetto di withAuthorizationQueryStringParameters configurazione MSAL.
val extraQueryParameters: MutableList<Pair<String, String>> = ArrayList()
extraQueryParameters.add(Pair("campaignId", "germany-promotion"))

val parameters = AcquireTokenParameters.Builder()
    .startAuthorizationFromActivity(activity)
    .withAuthorizationQueryStringParameters(extraQueryParameters) 
    // More settings here
    .build()

b2cApp!!.acquireToken(parameters)

Passare un hint per il token ID

Un'applicazione relying party può inviare un token JSON Web (JWT) in ingresso come parte della richiesta di autorizzazione OAuth2. Il token in ingresso è un hint per l'utente o la richiesta di autorizzazione. Azure AD B2C convalida il token e quindi estrae l'attestazione.

Per includere un hint per il token ID nella richiesta di autenticazione, eseguire le operazioni seguenti:

  1. Nei criteri personalizzati definire un profilo tecnico dell'hint per il token ID.
  2. Nel codice generare o acquisire un token ID e quindi impostare il token su una variabile , ad esempio idToken.
  3. Creare o usare un oggetto elenco esistente per archiviare parametri di query aggiuntivi.
  4. Aggiungere il id_token_hint parametro con la variabile corrispondente che archivia il token ID.
  5. Passare l'elenco di parametri di query aggiuntivi nel metodo dell'oggetto di withAuthorizationQueryStringParameters configurazione MSAL.
val extraQueryParameters: MutableList<Pair<String, String>> = ArrayList()
extraQueryParameters.add(Pair("id_token_hint", idToken))

val parameters = AcquireTokenParameters.Builder()
    .startAuthorizationFromActivity(activity)
    .withAuthorizationQueryStringParameters(extraQueryParameters) 
    // More settings here
    .build()

b2cApp!!.acquireToken(parameters)

Esperienza di visualizzazione Web incorporata

I Web browser sono necessari per l'autenticazione interattiva. Per impostazione predefinita, la libreria MSAL usa la visualizzazione Web di sistema. Durante l'accesso, la libreria MSAL visualizza la visualizzazione Web di sistema Android con l'interfaccia utente di Azure AD B2C.

Per altre informazioni, vedere l'articolo Abilitare l'accesso Single Sign-On tra app in Android con MSAL .

A seconda dei requisiti, è possibile usare la visualizzazione Web incorporata. Esistono differenze di comportamento per l'accesso Single Sign-On visivo e Single Sign-On tra la visualizzazione Web incorporata e la visualizzazione Web di sistema in MSAL.

Screenshot che illustra la differenza tra l'esperienza di visualizzazione Web di sistema e l'esperienza di visualizzazione Web incorporata.

Importante

È consigliabile usare l'impostazione predefinita della piattaforma, che è in genere il browser di sistema. Il browser di sistema offre prestazioni migliori nel ricordare gli utenti che hanno eseguito l'accesso in precedenza. Alcuni provider di identità, ad esempio Google, non supportano un'esperienza di visualizzazione incorporata.

Per modificare questo comportamento, aprire il file app/src/main/res/raw/auth_config_b2c.json . Aggiungere quindi l'attributo authorization_user_agent con il WEBVIEW valore . Nell'esempio seguente viene illustrato come modificare il tipo di visualizzazione Web in visualizzazione incorporata:

{
  "authorization_user_agent": "WEBVIEW" 
}

Passaggi successivi