Utilizzo di Okta per autenticare gli utenti

Questa pagina descrive come supportare l'autenticazione utente in Cloud Endpoints.

Per autenticare un utente, un'applicazione client deve inviare un JSON Web Token (JWT) nell'intestazione di autorizzazione del file HTTP all'API backend. La Extensible Service Proxy (ESP) convalida il token per conto dell'API, quindi non è necessario aggiungere alcun codice l'API per elaborare l'autenticazione. Tuttavia, devi configurare il tuo Documento OpenAPI per supportare i metodi di autenticazione scelti.

L'ESP convalida un JWT in modo efficiente utilizzando le chiavi pubbliche del suo emittente. ESP memorizza nella cache le chiavi pubbliche per cinque minuti. Inoltre, ESP memorizza nella cache i JWT convalidati per cinque minuti o fino alla scadenza del JWT, a seconda dell'evento che si verifica per primo.

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 (soggetto)
    • aud (pubblico)
    • iat (emissione:)
    • exp (data/ora di scadenza)

Configurare l'ESP per supportare l'autenticazione client

Devi disporre di un requisito e un oggetto definizioni nel documento OpenAPI affinché ESP le attestazioni nel JWT firmato.

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

  1. Aggiungi quanto segue alla definizione di sicurezza nel documento OpenAPI. 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 API da applicare all'intera API o a livello di metodo da applicare a un metodo specifico.

      security:
        - okta_jwt: []
    

Puoi definire più definizioni di sicurezza nel documento OpenAPI, 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. ESP 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. ESP accetta quindi i JWT con qualsiasi ID cliente specificati nella rivendicazione aud.

Puoi anche personalizzare le posizioni JWT aggiungendo x-google-extensions. Per maggiori dettagli, vedi Estensioni openAPI.

Chiamata autenticata a un'API Endpoints

Quando invii una richiesta utilizzando un token di autenticazione, per motivi di sicurezza ti consigliamo di inserire il token nell'intestazione Authorization:Bearer. Ad esempio:

curl -H "Authorization: Bearer ${TOKEN}" "${ENDPOINTS_HOST}/echo"

In questo caso, ENDPOINTS_HOST e TOKEN sono variabili di ambiente contenenti rispettivamente nome host e token di autenticazione dell'API. Consulta Eseguire una richiesta autenticata a un'API Endpoints. 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 "${ENDPOINTS_HOST}/echo?access_token=${TOKEN}"

Ricezione di risultati autenticati nell'API

In genere, l'ESP inoltra tutte le intestazioni che riceve. Tuttavia, sostituisce il l'intestazione Authorization originale quando l'indirizzo di backend è specificato da x-google-backend nella specifica OpenAPI o BackendRule nella configurazione del servizio gRPC.

L'ESP invierà il risultato dell'autenticazione in X-Endpoint-API-UserInfo all'API di backend. Ti consigliamo di utilizzare questa intestazione anziché l'originale Intestazione Authorization. Questa intestazione è una stringa che base64url codifica un oggetto JSON. Il formato dell'oggetto JSON è diverso tra ESPv2 ed ESP. Per ESPv2, l'oggetto JSON è esattamente il payload JWT originale. Per ESP, l'oggetto JSON utilizza nomi di campo diversi e inserisce il payload JWT originale nel campo claims. Consulta Gestire i JWT nel servizio di backend per ulteriori informazioni sul formato.

Passaggi successivi