Utilizzo di Auth0 per autenticare gli utenti

In questa pagina viene descritto come supportare l'autenticazione degli utenti in Cloud Endpoints.

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. Extensible Service Proxy (ESP) convalida il token per conto dell'API, perciò non devi aggiungere alcun codice all'API per elaborare l'autenticazione. Tuttavia, devi configurare il documento OpenAPI per supportare i metodi di autenticazione scelti.

ESP convalida un JWT in modo efficace utilizzando le chiavi pubbliche dell'emittente del JWT. 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

  • Aggiungi il codice di autenticazione all'applicazione client, seguendo la documentazione di Auth0.

  • 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 ESP per supportare l'autenticazione client

Devi avere un oggetto requisito di sicurezza e un oggetto definizioni di sicurezza nel documento OpenAPI affinché ESP possa convalidare le attestazioni nel JWT firmato.

Per supportare l'autenticazione Auth0:

  1. Aggiungi quanto segue alla definizione di sicurezza nel documento OpenAPI:

      securityDefinitions:
        auth0_jwk:
          authorizationUrl: ""
          flow: "implicit"
          type: "oauth2"
          # Replace YOUR-ACCOUNT-NAME with your Auth0 account name.
          x-google-issuer: "https://YOUR-ACCOUNT-NAME.auth0.com/"
          x-google-jwks_uri: "https://YOUR-ACCOUNT-NAME.auth0.com/.well-known/jwks.json"
          # Optional. Replace YOUR-CLIENT-ID with your client ID
          x-google-audiences: "YOUR-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:
        - auth0_jwk: []
    

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

Puoi anche personalizzare le località JWT aggiungendo x-google-extensions. Per maggiori dettagli, consulta la pagina relativa alle estensioni openAPI.

Esecuzione di una 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"

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

Ricezione di risultati autenticati nella tua API

Di solito ESP inoltra tutte le intestazioni che riceve. Tuttavia, esegue l'override dell'intestazione Authorization originale quando l'indirizzo di backend è specificato da x-google-backend nella specifica OpenAPI o BackendRule nella configurazione del servizio gRPC.

ESP invierà il risultato dell'autenticazione in X-Endpoint-API-UserInfo all'API di backend. Ti consigliamo di utilizzare questa intestazione anziché l'intestazione Authorization originale. Questa intestazione è una stringa che base64url codifica un oggetto JSON. Il formato degli oggetti 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. Per saperne di più sul formato, vedi Gestire i JWT nel servizio di backend.

Esempi

Passaggi successivi