Semplificare l'autenticazione utilizzando la scheda Auth

La scheda Autenticazione fornisce un flusso di autenticazione sicuro e semplificato da utilizzare nelle app per Android. Creando e avviando un AuthTabIntent, puoi richiamare una scheda personalizzata specializzata progettata per gestire un'esperienza di autenticazione end-to-end. La scheda è semplificata e ha funzionalità limitate, consentendo agli utenti di concentrarsi sull'attività in corso. Al termine, la scheda richiama l'applicazione con un risultato utilizzando https o schemi personalizzati.

Una scheda personalizzata completa
Figura 1. Scheda personalizzata completa.
Una scheda di autenticazione contenente funzionalità minime
Figura 2. Scheda Autenticazione con funzionalità minime.

A partire da Chrome 137, la scheda di autenticazione può sostituire direttamente le integrazioni di autenticazione delle schede personalizzate esistenti. Per gli utenti i cui dispositivi non supportano la scheda Auth, il fallback alle schede personalizzate è automatico. La migrazione dalle schede personalizzate alla scheda di autenticazione può essere eseguita modificando poche righe di codice.

Come funziona

Con la scheda Auth, un'app client avvia una scheda personalizzata specializzata che presenta una finestra del browser che carica un URL con la pagina di autenticazione prevista. Al termine, la scheda Autenticazione restituisce il risultato dell'autenticazione utilizzando un callback.

Dopo l'autenticazione, quando si verifica una navigazione all'URI di reindirizzamento del callback fornito in precedenza, il reindirizzamento viene acquisito e restituito all'applicazione client utilizzando il callback. Per i reindirizzamenti che utilizzano lo schema https, il browser verifica che il dominio di reindirizzamento e l'app client appartengano allo stesso publisher utilizzando Digital Asset Links.

Il client riceve l'URI di navigazione con lo schema di reindirizzamento (o per https, l'host e il percorso di reindirizzamento) utilizzando il callback fornito. Questi dati includono un codice di risultato e qualsiasi altro dato fornito dall'interfaccia di autenticazione. Puoi utilizzare questi dati per verificare l'autenticazione o gestire scenari non riusciti.

Perché la scheda Autenticazione?

Prima della scheda Autenticazione, potevi utilizzare un intent Custom Tabs standard per gestire i flussi di autenticazione. Una scheda di autenticazione è preferibile perché offre maggiore sicurezza, un'esperienza semplificata e astrae anche alcuni dettagli interni per l'autenticazione dal codice client. Per questi motivi, la scheda Autenticazione offre un'esperienza migliore.

Sicurezza ottimizzata

In una tipica implementazione di schede personalizzate, è necessario un intent per ricevere dati dalla finestra del browser che gestisce l'autenticazione. Ciò richiede codice aggiuntivo ed espone la tua app a potenziali interferenze con l'intent. Con una scheda di autenticazione, i dati vengono ricevuti utilizzando un callback, con il trasferimento diretto dei dati tra l'API Android e l'app client.

Un'esperienza semplificata

In una scheda personalizzata, l'utente ha accesso a funzionalità aggiuntive nel browser che potrebbero non essere desiderate per un flusso di autenticazione. Una scheda di autenticazione offre un'esperienza semplificata che rimuove la maggior parte delle opzioni di personalizzazione disponibili in una scheda personalizzata standard. Per i browser Chrome, sono inclusi il pulsante di riduzione a icona, il menu contestuale con pressione prolungata e la funzionalità Tocca e cerca, nonché le voci di menu per Apri in Chrome, aggiungere ai preferiti, scaricare e condividere e Aggiungi a schermata Home.

Le schede di autenticazione conservano comunque le funzionalità per la compilazione automatica di password e pagamenti salvati in precedenza, per navigare indietro o avanti, aggiornare, mostrare le informazioni della pagina, richiedere una versione desktop della pagina e fornire la traduzione.

Astrazione dei dati

L'implementazione della scheda Autenticazione da sola elimina la necessità di un intent per ricevere dati dal browser, nonché i filtri per intent in AndroidManifest.xml precedentemente richiesti per il corretto funzionamento dell'autenticazione. In questo modo si elimina la complessità sul lato client. Alcune di queste funzionalità possono comunque essere incluse nel codice client per garantire la compatibilità con le versioni precedenti con le schede personalizzate nei casi in cui la scheda di autenticazione non è disponibile sui dispositivi degli utenti.

Implementare la scheda Autenticazione

La scheda Autenticazione richiede la libreria di autenticazione del browser AndroidX. La libreria del browser AndroidX può essere aggiunta nella sezione delle dipendenze del file build.gradle di un progetto. Le API sono disponibili in una build alpha. Aggiungi quanto segue al file di build:

dependencies {
    implementation 'androidx.browser:browser:1.9.0'
}

Prima di lanciare una scheda Autenticazione, dichiara un ActivityResultLauncher che accetta un ActivityResultCaller e un ActivityResultCallback. Questa operazione viene eseguita prima della creazione dell'attività o del fragment:

// In your activity

private final ActivityResultLauncher<Intent> mLauncher =
    AuthTabIntent.registerActivityResultLauncher(this, this::handleAuthResult);

private void handleAuthResult(AuthResult result) {
    String message = switch (result.resultCode) {
        case AuthTabIntent.RESULT_OK -> "Received auth result.";
        case AuthTabIntent.RESULT_CANCELED -> "AuthTab canceled.";
        case AuthTabIntent.RESULT_VERIFICATION_FAILED -> "Verification failed.";
        case AuthTabIntent.RESULT_VERIFICATION_TIMED_OUT -> "Verification timed out.";
    }

    if (result.resultCode == AuthTabIntent.RESULT_OK) {
        message += " Uri: " + result.resultUri;
    }

    Toast.makeText(this, message, Toast.LENGTH_LONG).show();  
}

Successivamente, utilizza AuthTabIntent.Builder per creare un AuthTabIntent, quindi chiama il metodo launch. I metodi di avvio accettano uno dei due set di parametri in base allo schema richiesto:

  • redirectScheme: per uno schema di reindirizzamento personalizzato, il browser reindirizza e restituisce l'URI con lo schema fornito.

  • redirectHost, redirectPath: per gli schemi di reindirizzamento https, l'API richiede un host e un percorso separati affinché il browser rilevi il reindirizzamento e restituisca l'URI. Quando utilizzi HTTPS, è necessaria la verifica di Digital Asset Links.

private void launchAuthTab() {
    AuthTabIntent authTabIntent = new AuthTabIntent.Builder.build();
    authTabIntent.launch(mLauncher, Uri.parse("https://www.example.com/auth"), "mycustomscheme");
}

private void launchAuthTabHttps() {
    String host = "your_host";
    String path = "your_path";
    AuthTabIntent authTabIntent = new AuthTabIntent.Builder.build();
    authTabIntent.launch(mLauncher, Uri.parse("https://www.example.com/auth", host, path);
}

Eseguire la migrazione dalle schede personalizzate alla scheda Autenticazione

Aggiorna l'implementazione dell'autenticazione delle schede personalizzate esistente modificando l'intent delle schede personalizzate con il nuovo intent della scheda di autenticazione. Dopo aver aggiunto il codice, individua l'intent Schede personalizzate e modificalo con il nuovo intent Scheda di autenticazione.

CustomTabsIntent customTabsIntent = new CustomTabsIntent.Builder().build();
customTabsIntent.launchUrl(context, uri)

// change to -->

AuthTabIntent authTabIntent = new AuthTabIntent.Builder.build();

authTabIntent.launch(mLauncher, Uri.parse("https://www.example.com/auth", "mycustomscheme");

/* - OR - */

authTabIntent.launch(mLauncher, Uri.parse("https://www.example.com/auth", host, path);

Fallback alle schede personalizzate

Alcune implementazioni possono richiedere l'autenticazione quando il dispositivo dell'utente non è attrezzato per gestire la scheda Autenticazione. Ad esempio, questo potrebbe verificarsi se il browser predefinito non supporta la scheda di autenticazione o se la versione del browser predefinito non è al livello richiesto. In questi casi, un intent della scheda di autenticazione avvia automaticamente una scheda personalizzata per i browser che la supportano.

Puoi verificare se la scheda Autenticazione è supportata dal browser utilizzando CustomTabsClient#isAuthTabSupported(). Questo metodo consente alla tua app di scegliere dinamicamente tra l'avvio di una scheda di autenticazione o di un flusso di schede personalizzate in base alle funzionalità del browser. Per gestire correttamente la situazione in cui la scheda Autenticazione non è supportata, aggiungi l'implementazione della scheda Autenticazione mantenendo la gestione dei flussi di autenticazione del codice delle schede personalizzate esistente come fallback.

Fai attenzione a gestire i dati che possono arrivare al tuo ActivityResultCallback o al tuo intent Attività. Tieni presente che se AuthTabIntent viene utilizzato per avviare l'esperienza di riserva e la scheda di autenticazione non è supportata dal browser corrente, la tua app riceve un risultato Activity.RESULT_CANCELED quando la scheda personalizzata viene chiusa.

Un esempio di implementazione della scheda di autenticazione con fallback a Custom Tabs è disponibile nella libreria Android Browser Helper.

Risorse aggiuntive