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 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 i JWKS per cinque
minuti e lo aggiorna ogni cinque minuti.
Prima di iniziare
- Aggiungi all'applicazione client il codice di autenticazione che consente agli utenti di autenticharsi accedendo con l'Account Google.
-
Quando l'applicazione client invia una richiesta HTTP, l'intestazione di autorizzazione
la richiesta deve contenere le seguenti attestazioni JWT:
iss
(emittente)sub
(oggetto)aud
(pubblico)iat
(emissione:)exp
(tempo di scadenza)
Configurazione di 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 mediante un token ID Google:
Aggiungi quanto segue alla definizione di sicurezza nella configurazione dell'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"
Aggiungi una sezione di sicurezza a livello API da applicare all'intera API o a livello di metodo da applicare a un metodo specifico.
security: - google_id_token: []
Puoi definire più definizioni di sicurezza nella configurazione API, ma ognuna deve avere un emittente diverso. Se utilizzi le sezioni di sicurezza in a livello di API, mentre le impostazioni a livello di metodo hanno la precedenza Impostazioni a livello di API.
Il campo x-google-audiences
non è obbligatorio. Gateway API
accetta tutti i JWT con il nome del servizio di backend sotto forma di
https://SERVICE_NAME
nella rivendicazione aud
.
Per consentire a ID client aggiuntivi di accedere al servizio di backend, puoi specificare gli ID client consentiti nel campo x-google-audiences
utilizzando valori separati da virgola. API Gateway accetta quindi i JWT con uno qualsiasi dei
ID cliente specificati nella rivendicazione aud
.
Effettuare 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"
In questo caso, GATEWAY_URL
e TOKEN
sono variabili di ambiente contenenti
rispettivamente l'URL del gateway e il token di autenticazione di cui è stato eseguito il deployment. Consulta
Effettuare una richiesta autenticata a un'API API Gateway per un codice campione che invia una richiesta utilizzando l'intestazione Authorization:Bearer
.
Se non puoi utilizzare l'intestazione quando invii la richiesta, puoi inserire il
in un parametro di query chiamato 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 il
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. Ti consigliamo di utilizzare questa intestazione anziché l'intestazione Authorization
originale. Questa intestazione è codificata in base64url
e contiene
per il payload JWT.