Semplificare l'autenticazione utilizzando la scheda Auth

Auth Tab fornisce un flusso di autenticazione sicuro e semplificato da utilizzare nelle app per Android. Creando e lanciando 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 la tua applicazione con un risultato utilizzando https o schemi personalizzati.

Una scheda personalizzata completa
Figura 1. Scheda personalizzata con tutte le funzionalità.
Una scheda Auth contenente funzionalità minime
Figura 2. Scheda Auth con funzionalità minime.

A partire da Chrome 132, la scheda Auth può sostituire direttamente le integrazioni di autenticazione di Custom Tabs esistenti. Per gli utenti i cui dispositivi non supportano Auth Tab, il passaggio a Custom Tabs è automatico. La migrazione da Custom Tabs ad Auth Tab può essere eseguita modificando alcune 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 Auth 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 siano di proprietà dello stesso publisher utilizzando Digital Asset Links.

Il client riceve l'URI visitato 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é Auth Tab?

Prima di Auth Tab, potevi utilizzare un'intent Custom Tabs standard per potenziare i flussi di autenticazione. Una scheda di autenticazione è preferibile perché offre una maggiore sicurezza, un'esperienza semplificata e consente anche di astrarre alcuni elementi interni per l'autenticazione dal codice client. Per questi motivi, Auth Tab offre un'esperienza migliore.

Sicurezza ottimizzata

In una tipica implementazione di Scheda personalizzata, è necessario un intent per ricevere i dati dalla finestra del browser che gestisce l'autenticazione. Ciò richiede codice aggiuntivo ed espone la tua app a potenziali interferenze con lo scopo. Con una scheda Auth, i dati vengono ricevuti utilizzando un callback, con 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 del 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 minimizzazione, il menu contestuale a pressione prolungata e la ricerca tocco, nonché i menu Apri in Chrome, Aggiungi ai preferiti, Scarica e condividi e Aggiungi a schermata Home.

Le schede di autenticazione mantengono le funzionalità che consentono al browser di compilare automaticamente password e pagamenti salvati in precedenza, andare avanti o indietro, aggiornare, mostrare le informazioni sulla pagina, richiedere una versione desktop della pagina e fornire la traduzione.

Astrazione dei dati

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

Implementare la scheda Auth

La scheda Auth richiede la libreria di autenticazione del browser AndroidX. La raccolta Browser di 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-alpha01'
}

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

// 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 e poi chiama il metodo launch. I metodi di lancio accettano uno dei due insiemi 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 per consentire al browser di rilevare il reindirizzamento e restituire l'URI. Quando utilizzi https, è necessaria la verifica di Digital Asset Link.

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 da Custom Tabs alla scheda Auth

Aggiorna l'implementazione esistente dell'autenticazione delle schede personalizzate modificando l'intent delle schede personalizzate con il nuovo intent Auth Tab. Dopo aver aggiunto il codice, individua l'intent Custom Tabs e modificalo in base al nuovo intent Auth Tab.

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

Ripristino dei dati in caso di errore con le schede personalizzate

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

Per gestire in modo elegante questa situazione, aggiungi l'implementazione della scheda Auth mantenendo il codice esistente di Custom Tabs che gestisce i flussi di autenticazione come opzione di riserva.

Gli utenti con dispositivi compatibili con Auth Tab vedono il nuovo flusso di Auth Tab, mentre gli altri tornano all'implementazione precedente di Custom Tabs. Fai attenzione a gestire i dati che possono essere inviati a ActivityResultCallback o all'intent Attività. Tieni presente che se viene utilizzato AuthTabIntent per avviare l'esperienza di riserva e la scheda Auth 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 Auth con fallback alle schede personalizzate è disponibile nella libreria Android Browser Helper.

Risorse aggiuntive