Utilizzo di Okta 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 il protocollo
JSON Web Key Set (JWKS) dell'emittente. 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 guida all'integrazione di Okta per Google Cloud Endpoints.
-
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
(rilasciato il giorno)exp
(data/ora 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.
Come spiegato nella guida all'integrazione di Okta per Google Cloud Endpoints, apporta le seguenti modifiche al documento OpenAPI:
Aggiungi quanto segue alla definizione di sicurezza nella configurazione dell'API, che segue lo schema di sicurezza OpenAPI 2.0. Sostituisci
YOUR_OKTA_TENANT_NAME
con del tuo tenant Okta eYOUR_OKTA_CLIENT_ID
con all'ID client che hai creato nel tuo tenant Okta.securityDefinitions: okta_jwt: authorizationUrl: "" flow: "implicit" type: "oauth2" x-google-issuer: "https://YOUR_OKTA_TENANT_NAME.com" x-google-jwks_uri: "https://YOUR_OKTA_TENANT_NAME.com/oauth2/v1/keys" x-google-audiences: "YOUR_OKTA_CLIENT_ID"
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: - okta_jwt: []
Puoi definire più definizioni di sicurezza nella configurazione dell'API, ma ogni definizione 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 degli ID client specificati nel claim 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
. Per
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 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 "${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 backend. Ti consigliamo di utilizzare questa intestazione anziché l'originale
Intestazione Authorization
. Questa intestazione è codificata in base64url
e contiene il payload JWT.