Scrivere un autenticatore SPNEGO per Microsoft Edge in Android

Terze parti possono abilitare l'autenticazione SPNEGO in Microsoft Edge per Android. Per fornire questa autenticazione, devono fornire un autenticatore SPNEGO. Questo articolo descrive l'interfaccia tra Edge e SPNEGO Authenticator.

Introduzione

L'autenticatore SPNEGO viene fornito da un servizio Android. L'autenticatore deve essere incorporato in un'app, fornita da terze parti, installata nel dispositivo dell'utente. L'app è responsabile della gestione degli account usati per l'autenticazione SPNEGO e di tutte le comunicazioni con il server SPNEGO.

SPNEGO Authenticator è un account AndroidAuthenticator. Di conseguenza, deve seguire il modello descritto in AbstractAccountAuthenticator. Deve implementare una classe di autenticatore derivata da AbstractAccountAuthenticator.

L'autenticatore SPNEGO deve definire un nuovo tipo di account. Il nome del tipo di account deve essere derivato dal nome di dominio del writer, ad esempio com.example.spnego. Il tipo di account deve essere definito per usare customTokens e deve supportare la funzionalità "SPNEGO" (HttpNegotiateConstants.SPNEGO_FEATURE).

Interfaccia per Microsoft Edge

Edge trova l'autenticatore SPNEGO tramite il tipo di account Android fornito. Il tipo di account definito dall'autenticatore viene passato a Edge tramite i criteri AuthAndroidNegotiateAccountType .

L'interfaccia per Edge avviene tramite il framework di gestione degli account Android, in particolare tramite AbstractAccountManager.getAuthToken . Edge, in org.chromium.net.HttpNegotiateConstants definisce altri valori e chiavi usati negli argomenti di getAuthTokene nel bundle di risultati restituito.

Argomenti getAuthToken

Quando viene chiamato getAuthToken , è authTokenType "SPNEGO:HOSTBASED:<spn>" dove <spn> è l'entità per la richiesta. Questa sarà sempre un'entità basata su host nell'implementazione corrente. Le versioni future possono consentire altri tipi di entità, ma in tal caso usano un prefisso diverso. Gli autenticatori SPNEGO devono controllare il prefisso.

Il options bundle contiene queste chiavi:

Se si tratta del secondo o successivo round di una sequenza di autenticazione a più round, contiene anche le chiavi seguenti.

  • HttpNegotiateConstants.KEY_INCOMING_AUTH_TOKEN - Token in ingresso dall'intestazione WWW-Authenticate con codifica Base64.
  • HttpNegotiateConstants.KEY_SPNEGO_CONTEXT - Contesto SPNEGO fornito dall'autenticatore nel round precedente. Microsoft Edge considera questo bundle come un oggetto opaco e lo mantiene semplicemente tra gli arrotondamenti.

bundle di risultati getAuthToken

Il bundle di risultati finale di getAuthToken (restituito come valore restituito di getAuthTokeno tramite AccountAuthenticatorResponse) deve contenere il nome dell'account, il tipo di account e il token come definito nella documentazione di Android. Inoltre, il bundle deve contenere queste chiavi:

  • HttpNegotiateConstants.KEY_SPNEGO_RESULT - codice del risultato SPNEGO. Deve essere uno dei valori definiti in HttpNegotiateConstants.
  • HttpNegotiateConstants.KEY_SPNEGO_CONTEXT : contesto da restituire all'autenticatore nel round di autenticazione successivo. Questa operazione è necessaria solo se l'autenticazione è incompleta.

Raccomandazioni per l'implementazione

Quando si implementa un autenticatore SPNEGO, è necessario prendere in considerazione le raccomandazioni seguenti.

  • Ogni account fornito da un autenticatore di account SPNEGO deve corrispondere a una singola entità utente (account) fornita da un singolo centro di distribuzione a chiave.

  • L'autenticatore dell'account non deve archiviare password. Deve invece archiviare le TGT per le entità utente e richiedere agli utenti di immettere nuovamente le password (o altri dati di autenticazione) alla scadenza del TGT.

  • L'autenticatore di account deve mantenere un elenco di applicazioni autorizzate (o firme dell'applicazione) per ogni account e rifiutare di fornire token di servizio ad altre applicazioni. L'elenco delle applicazioni autorizzate può essere:

    • Integrato nell'autenticatore dell'account.
    • Configurabile dall'amministratore di sistema.
    • Configurabile dall'utente. In questo caso, l'autenticatore dell'account potrebbe scegliere di consentire all'utente di autorizzare le nuove applicazioni in modo dinamico quando richiedono l'accesso per la prima volta.

    L'autenticatore può ottenere l'interfaccia utente dell'app chiamante usando il campo KEY_CALLER_UID del bundle delle opzioni e quindi identificare l'applicazione richiedente usando context.getPackageManager().getNameForUid() o una chiamata simile.

    Ciò è necessario per garantire che le app dannose eseguite dall'utente non possano usare le credenziali dell'utente per accedere ai servizi in modo imprevisto. Questo è importante perché l'uso dell'opzione token personalizzati (come descritto in precedenza) disabilita il controllo della firma di Android durante il recupero dei token di autenticazione.

  • A meno che non sia integrato nell'autenticatore di account, l'amministratore di sistema o l'utente deve essere in grado di configurare la posizione del centro di distribuzione delle chiavi.

Codici di errore visualizzati in Microsoft Edge

Oltre ai codici di errore che possono essere inoltrati dall'app di autenticazione, è possibile visualizzare gli errori seguenti quando si tenta di autenticare una richiesta:

  • ERR_MISSING_AUTH_CREDENTIALS: le informazioni sull'account non sono utilizzabili. Può essere generato per uno dei motivi seguenti.
    • L'utente non ha eseguito l'accesso all'app di autenticazione e non è stato trovato alcun account idoneo.
    • Le informazioni sull'account non possono essere ottenute perché l'app corrente non dispone delle autorizzazioni necessarie.
    • Sono disponibili più account idonei e non è possibile ottenere una selezione dall'utente.
  • ERR_UNEXPECTED: si è verificato un errore imprevisto e la richiesta è stata terminata.
  • ERR_MISCONFIGURED_AUTH_ENVIRONMENT: l'autenticazione non può essere completata a causa di alcuni problemi nella configurazione dell'app. Alcune autorizzazioni potrebbero non essere disponibili.

Usare Logcat per cercare il tag cr_net_auth nel log di sistema per ottenere altre informazioni sulla causa di questi errori.

Usare l'autenticatore con Microsoft Edge

Edge usa diversi criteri per controllare l'uso dell'autenticazione SPNEGO. Per abilitare l'autenticazione SPNEGO, è necessario configurare AuthServerAllowList e AuthAndroidNegotiateAccountType deve corrispondere al tipo di account fornito dall'autenticatore SPNEGO.

Licenza dei contenuti

Nota

Parti di questa pagina sono modifiche basate sul lavoro creato e condiviso da Chromium.org e usate in base ai termini descritti nella licenza Creative Commons Attribution 4.0 International. La pagina originale è disponibile qui.

Licenza Creative Commons
Questo lavoro è concesso in licenza in base a una licenza Creative Commons Attribution 4.0 International.

Vedere anche