Risoluzione dei problemi di convalida JWT

Quando un'applicazione client include un token web JSON (JWT) in una richiesta a un'API, l'Extensible Service Proxy (ESP) convalida il JWT prima di inviare la richiesta al backend dell'API. Questa pagina fornisce informazioni per la risoluzione dei problemi se la convalida JWT non va a buon fine e l'ESP restituisce un errore nella risposta al client. Per ulteriori informazioni sui JWT, consulta la RFC 7519.

Errore: 401: Jwt issuer is not configured

Questo può accadere durante il deployment di ESPv2 in Cloud Run, se il flag --allow-unauthenticated non viene utilizzato nel comando gcloud run deploy. Se il flag non viene utilizzato, il token JWT viene intercettato e verificato da Cloud Run <a=" docs="" managing-access"="" run="" securing="">access control IAM server e non da ESPv2. IAM potrebbe utilizzare un emittente diverso rispetto a ESPv2. </a=">

Errore: BAD_FORMAT

Controlla quanto segue:

  • Assicurati che il token JWT contenga un JSON valido.
  • Verifica che l'intestazione JWT contenga il campo "alg" e sia impostata su uno dei seguenti valori: "RS256", "HS256", "RS384", "HS384", "RS512" o "HS512"
  • Controlla il tipo di dati dei seguenti campi (se presenti) nel payload JWT:
    • I valori "iat" (issued at), "exp" (expiration time) e "nbf"(not before) devono essere numeri maggiori di 0 e non stringhe.
    • I campi "sub" (oggetto), "iss" (emittente) e "jti" (ID JWT) sono stringhe.
    • L'affermazione "aud" (segmento di pubblico) è una stringa o un array di stringhe.
  • Assicurati che nel payload JWT siano presenti i seguenti claim: "sub" (soggetto), "iss" (emittente) e "aud" (segmento di pubblico).

Di seguito è riportato un esempio di token JWT decodificato valido:

{
  "alg": "RS256",
  "typ": "JWT",
  "kid": "42ba1e234ac91ffca687a5b5b3d0ca2d7ce0fc0a"
}

Payload:
{
  "iss": "myservice@myproject.iam.gserviceaccount.com",
  "iat": 1493833746,
  "aud": "myservice.appspot.com",
  "exp": 1493837346,
  "sub": "myservice@myproject.iam.gserviceaccount.com"
}
Errore: TIME_CONSTRAINT_FAILURE

Utilizza jwt.io per decodificare il JWT e assicurarti che:

  • Esiste la rivendicazione "exp" (data e ora di scadenza).
  • Il valore della rivendicazione "exp" (data e ora di scadenza) è una data e un'ora nel futuro. La data e l'ora correnti devono essere precedenti alla data e all'ora di scadenza indicate nel reclamo "exp".
  • L'affermazione "nbf" (non prima) (se presente) è una data e un'ora nel passato. La data e l'ora correnti devono essere successive o uguali alla data e all'ora indicate nella rivendicazione "nbf".
Errore: UNKNOWN

Utilizza jwt.io per decodificare il JWT e assicurarti che:

  • Se il valore del reclamo "iss" (emittente) è un indirizzo email, i valori dei reclami "sub" (oggetto) e "iss" devono essere gli stessi. Ciò serve ad assicurarsi che, per gli emittenti di email, il JWT sia emesso autonomamente.

Errore: KEY_RETRIEVAL_ERROR

  • Verifica che l'URI della chiave pubblica specificato nel campo jwks_uri della sezione authentication: providers del file di configurazione .yaml gRPC sia corretto e valido.

Errore: Issuer not allowed

  • Verifica che l'attributo "iss" (issuer) nel token JWT corrisponda al campo issuer nella sezione authentication: providers del file di configurazione gRPC .yaml.

Errore: Audience not allowed

Se l'affermazione "aud" (segmento di pubblico) in un token JWT corrisponde al nome del servizio Endpoints, l'ESP convalida il segmento di pubblico e ignora i valori audiences nel file di configurazione .yaml gRPC. Ad esempio, se il nome del servizio è "myservice.endpoints.example-project-12345.cloud.goog", un JWT con "aud" impostato su "myservice.endpoints.example-project-12345.cloud.goog" o "https://myservice.endpoints.example-project-12345.cloud.goog" è un segmento di pubblico valido.

Se la rivendicazione "aud" non corrisponde al nome del servizio Endpoints:

  • Verifica che l'affermazione "aud" nel JWT corrisponda a uno dei valori audiences specificati nella sezione authentication: providers del file di configurazione gRPC.yaml.