Utilizzo di Firebase per autenticare gli utenti

In questa pagina viene descritto come supportare l'autenticazione utente in Cloud Endpoints.

Per autenticare un utente, un'applicazione client deve inviare un JSON Web Token (JWT) nell'intestazione di autorizzazione del file HTTP all'API backend. Extensible Service Proxy (ESP) convalida il token per conto della tua API, quindi non devi aggiungere alcun codice alla tua API per elaborare l'autenticazione. Tuttavia, devi configurare il documento OpenAPI in modo che supporti i metodi di autenticazione che hai scelto.

L'ESP convalida un JWT in modo efficiente utilizzando le chiavi pubbliche dell'emittente del JWT. ESP memorizza nella cache le chiavi pubbliche per minuti. Inoltre, ESP memorizza nella cache i JWT convalidati per cinque minuti o fino alla scadenza del JWT, a seconda dell'evento che si verifica per primo.

Prima di iniziare

  • Aggiungi il codice di autenticazione all'applicazione client seguendo la documentazione relativa all'autenticazione Firebase. Firebase supporta l'autenticazione tramite password, numeri di telefono e provider di identità federati molto diffusi come Google, Facebook e Twitter.

  • Quando l'applicazione client invia una richiesta HTTP, l'intestazione di autorizzazione la richiesta deve contenere le seguenti attestazioni JWT:
    • iss (emittente)
    • sub (soggetto)
    • aud (pubblico)
    • iat (rilasciato il giorno)
    • exp (tempo di scadenza)

Configurazione del documento OpenAPI

Devi disporre di un requisito e un oggetto definizioni nel documento OpenAPI affinché ESP le attestazioni nel JWT firmato.

Per supportare l'autenticazione Firebase:

  1. Aggiungi quanto segue alla definizione di sicurezza in OpenAPI documento:

      securityDefinitions:
        firebase:
          authorizationUrl: ""
          flow: "implicit"
          type: "oauth2"
          # Replace YOUR-PROJECT-ID with your project ID
          x-google-issuer: "https://securetoken.google.com/YOUR-PROJECT-ID"
          x-google-jwks_uri: "https://www.googleapis.com/service_accounts/v1/metadata/x509/securetoken@system.gserviceaccount.com"
          x-google-audiences: "YOUR-PROJECT-ID"
    
  2. Aggiungi una sezione di sicurezza a livello di API per applicarla all'intera API o a livello di metodo per applicarla a un metodo specifico.

      security:
        - firebase: []
    

Puoi definire più definizioni di sicurezza nel documento OpenAPI, ma ogni definizione deve avere un emittente diverso. Se utilizzi sezioni di sicurezza sia a livello di API sia a livello di metodo, le impostazioni a livello di metodo sostituiscono quelle a livello di API.

Puoi anche personalizzare le località JWT aggiungendo x-google-extensions. Per maggiori dettagli, vedi Estensioni openAPI.

Eseguire una chiamata autenticata a un'API Endpoints

Per motivi di sicurezza, quando invii una richiesta utilizzando un token di autenticazione, ti consigliamo di inserire il token nell'intestazione Authorization:Bearer. Per esempio:

curl -H "Authorization: Bearer ${TOKEN}" "${ENDPOINTS_HOST}/echo"

Qui, ENDPOINTS_HOST e TOKEN sono variabili di ambiente contenenti rispettivamente il nome dell'host dell'API e il token di autenticazione. Consulta Eseguire una richiesta autenticata a un'API Endpoints. per il codice di esempio che invia una richiesta utilizzando l'intestazione Authorization:Bearer.

Se non puoi utilizzare l'intestazione quando invii la richiesta, puoi inserire il token di autenticazione in un parametro di query denominato access_token. Ad esempio:

curl "${ENDPOINTS_HOST}/echo?access_token=${TOKEN}"

Ricevere risultati autenticati nell'API

In genere, l'ESP inoltra tutte le intestazioni che riceve. Tuttavia, sostituisce il l'intestazione Authorization originale quando l'indirizzo di backend è specificato da x-google-backend nella specifica OpenAPI o BackendRule nella configurazione del servizio gRPC.

ESP invierà il risultato dell'autenticazione nell'X-Endpoint-API-UserInfo all'API backend. Ti consigliamo di utilizzare questa intestazione anziché l'intestazioneAuthorization originale. Questa intestazione è una stringa codificata da base64url un oggetto JSON. Il formato degli oggetti JSON è diverso tra ESPv2 ed ESP. Per ESPv2, l'oggetto JSON è esattamente il payload JWT originale. Per ESP, l'oggetto JSON utilizza nomi di campo diversi e inserisce il payload JWT originale nel campo claims. Per ulteriori informazioni sul formato, consulta Gestire i token JWT nel servizio di backend.

Passaggi successivi