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

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

Come spiegato nella guida all'integrazione di Okta per Google Cloud Endpoints, apporti le seguenti modifiche al documento OpenAPI:

  1. Aggiungi quanto segue alla definizione di sicurezza nella configurazione API, che segue lo schema di sicurezza OpenAPI 2.0. Sostituisci YOUR_OKTA_TENANT_NAME con il nome del tenant Okta e YOUR_OKTA_CLIENT_ID con l'ID client che hai creato nel 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 sulla sicurezza a livello di API da applicare 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 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