Utilizzo di Firebase per autenticare gli utenti

Questa pagina descrive come supportare l'autenticazione utente in API Gateway.

Per autenticare un utente, un'applicazione client deve inviare un token JWT (JSON Web Token) nell'intestazione di autorizzazione della richiesta HTTP all'API di backend. API Gateway convalida il token per conto della tua API, quindi non devi aggiungere alcun codice alla tua API per elaborare l'autenticazione. Tuttavia, devi configurare la configurazione dell'API per il tuo gateway in modo che supporti i metodi di autenticazione che hai scelto.

API Gateway convalida un JWT in modo efficiente utilizzando l'insieme di chiavi web JSON (JWKS) dell'emittente del JWT. La posizione del file JWKS è specificata nel campo x-google-jwks_uri della configurazione API del gateway. API Gateway memorizza nella cache il file JWKS per cinque minuti e lo aggiorna ogni cinque minuti.

Prima di iniziare

  • Aggiungi il codice di autenticazione all'applicazione client seguendo la documentazione sull'autenticazione Firebase. Firebase supporta l'autenticazione tramite password, numeri di telefono e noti provider di identità federati come Google, Facebook e Twitter.
    • Quando l'applicazione client invia una richiesta HTTP, l'intestazione di autorizzazione nella richiesta deve contenere i seguenti claim JWT:
      • iss (emittente)
      • sub (oggetto)
      • aud (pubblico)
      • iat (rilasciato il giorno)
      • exp (data/ora di scadenza)

Configurare API Gateway per supportare l'autenticazione client

Per consentire ad API Gateway di convalidare i claim nel JWT firmato, devi avere un oggetto obbligo di sicurezza e un oggetto definizioni di sicurezza nella configurazione dell'API.

Per supportare l'autenticazione Firebase:

  1. Aggiungi quanto segue alla definizione di sicurezza nella configurazione dell'API, che segue lo schema di sicurezza OpenAPI 2.0:

     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 da applicare all'intera API o a livello di metodo da applicare a un metodo specifico.

     security:
        - firebase: []
    

Puoi definire più definizioni di sicurezza nella configurazione dell'API, 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.

Eseguire una chiamata autenticata a un'API API Gateway

Quando invii una richiesta utilizzando un token di autenticazione, ti consigliamo di inserire il token nell'intestazione Authorization:Bearer. Ad esempio:

curl --request POST \
  --header "Authorization: Bearer ${TOKEN}" \
  "${GATEWAY_URL}/echo"

Qui, GATEWAY_URL e TOKEN sono variabili di ambiente contenenti rispettivamente l'URL del gateway di cui è stato eseguito il deployment e il token di autenticazione. Consulta Eseguire una richiesta autenticata a un'API API Gateway per il codice campione 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 "${GATEWAY_URL}/echo?access_token=${TOKEN}"

Ricevere risultati autenticati nell'API

In genere, API Gateway inoltra tutte le intestazioni che riceve. Tuttavia, sostituisce l'intestazione Authorization originale quando l'indirizzo del backend è specificato da x-google-backend nella configurazione dell'API.

API Gateway invierà il risultato dell'autenticazione in X-Apigateway-Api-Userinfo all'API di backend. Ti consigliamo di utilizzare questa intestazione anziché l'intestazione Authorization originale. Questa intestazione è codificata in base64url e contiene il payload JWT.

Passaggi successivi