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

  • 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:

  1. 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 e YOUR_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"
    
  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:
        - 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.

Passaggi successivi