Utilizzo di token ID Google personalizzati per autenticare gli utenti

In questa pagina viene descritto come supportare l'autenticazione utente in API Gateway.

Per autenticare un utente, un'applicazione client deve inviare all'API di backend un token web JSON (JWT) nell'intestazione di autorizzazione della richiesta HTTP. API Gateway convalida il token per conto dell'API, così non devi aggiungere alcun codice all'API per elaborare l'autenticazione. Tuttavia, devi configurare la configurazione API per il gateway in modo da supportare i metodi di autenticazione scelti.

API Gateway convalida un JWT a prestazioni elevate utilizzando il JSON Web Key Set (JWKS) dell'emittente JWT. La località del JWKS è specificata nel campo x-google-jwks_uri della configurazione API del gateway. API Gateway memorizza nella cache il JWKS per cinque minuti e lo aggiorna ogni cinque minuti.

Prima di iniziare

  • Aggiungi il codice di autenticazione all'applicazione client che consenta agli utenti di eseguire l'autenticazione accedendo con un Account Google.

  • Quando l'applicazione client invia una richiesta HTTP, l'intestazione di autorizzazione nella richiesta deve contenere le seguenti attestazioni JWT:
    • iss (emittente)
    • sub (oggetto)
    • aud (pubblico)
    • iat (emesso in data)
    • exp (data di scadenza)

Configurazione di API Gateway per supportare l'autenticazione client

Devi avere un oggetto requisito di sicurezza e un oggetto definizioni di sicurezza nella configurazione API per API Gateway per convalidare le attestazioni nel JWT firmato.

Per supportare l'autenticazione mediante un token ID Google:

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

      securityDefinitions:
        google_id_token:
          authorizationUrl: ""
          flow: "implicit"
          type: "oauth2"
          x-google-issuer: "https://accounts.google.com"
          x-google-jwks_uri: "https://www.googleapis.com/oauth2/v3/certs"
          # Optional. Replace YOUR-CLIENT-ID with your client ID
          x-google-audiences: "YOUR-CLIENT-ID"
    
  2. Aggiungi una sezione sulla sicurezza a livello di API da applicare all'intera API o a livello di metodo per applicarla a un metodo specifico.

      security:
        - google_id_token: []
    

Puoi definire più definizioni di sicurezza nella configurazione API, ma ogni definizione deve avere un emittente diverso. Se utilizzi sezioni di sicurezza sia a livello di API che a livello di metodo, le impostazioni a livello di metodo hanno la precedenza su quelle a livello di API.

Il campo x-google-audiences non è obbligatorio. API Gateway accetta tutti i JWT con il nome del servizio di backend sotto forma di https://SERVICE_NAME nell'attestazione aud.

Per consentire a ulteriori ID client di accedere al servizio di backend, puoi specificare gli ID client consentiti nel campo x-google-audiences utilizzando valori separati da virgole. API Gateway accetta quindi i JWT con uno qualsiasi degli ID client specificati nella attestazione aud.

Esecuzione di una chiamata autenticata a un'API API Gateway

Quando invii una richiesta utilizzando un token di autenticazione, ti consigliamo di inserirlo 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 Esecuzione di 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 per l'invio della richiesta, puoi inserire il token di autenticazione in un parametro di query chiamato access_token. Ad esempio:

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

Ricezione di risultati autenticati nella tua API

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

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

Passaggi successivi