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 ESP restituisce un errore nella risposta al client. Per saperne di più sui JWT, consulta la RFC 7519.
Errore:401: Jwt issuer is not configured
Ciò può accadere quando viene eseguito il deployment di ESPv2 in Cloud Run, 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 dal server di controllo
dell'accesso IAM di Cloud Run <a=" docs="" managing-access"="" run="" securing="">e non da ESPv2. IAM potrebbe utilizzare un emittente diverso da ESPv2.
</a=">
BAD_FORMAT
Controlla quanto segue:
- Assicurati che il JWT contenga un JSON valido.
- Verifica che l'intestazione JWT abbia 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 campi
"iat"(data di emissione),"exp"(ora di scadenza) e"nbf"(non prima di) sono numeri maggiori di 0 e non stringhe. - I campi
"sub"(oggetto),"iss"(emittente) e"jti"(ID JWT) sono stringhe. - L'attestazione
"aud"(pubblico) è una stringa o un array di stringhe. - Assicurati che nel payload JWT siano presenti le seguenti rivendicazioni:
"sub"(soggetto),"iss"(emittente) e"aud"(destinatario).
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"
}
TIME_CONSTRAINT_FAILURE
Utilizza jwt.io per decodificare il JWT e assicurati che:
- Esiste la rivendicazione
"exp"(tempo di scadenza). - Il valore dell'attestazione
"exp"(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 nella rivendicazione"exp". - L'attestazione
"nbf"(non prima) (se presente) è una data e un'ora nel passato. La data e l'ora correnti devono essere uguali o successive alla data e all'ora indicate nella rivendicazione"nbf".
UNKNOWN
Utilizza jwt.io per decodificare il JWT e assicurati che:
- Se l'attestazione
"iss"(emittente) è un indirizzo email, le attestazioni"sub"(soggetto) e"iss"devono essere uguali. Ciò garantisce che per gli emittenti di email, il JWT sia autoemesso.
Errore: KEY_RETRIEVAL_ERROR
- Verifica che l'URI della chiave pubblica specificato nel campo
x-google-jwks_uridel documento OpenAPI sia corretto e valido.
Errore: Issuer not allowed
Verifica che l'attestazione
"iss"(emittente) nel token JWT corrisponda al campox-google-issuernella sezionesecurityDefinitionsdell'oggetto di sicurezza nel tuo documento OpenAPI.Nel documento OpenAPI, verifica che l'oggetto di sicurezza sia abilitato per il metodo API richiamato.
Consulta il file
sample openapi.yaml
per un esempio di come descrivere la sicurezza a livello di metodo utilizzando gli oggetti
securityDefinition e security.
Errore: Audience not allowed
Confronta l'attestazione "aud" (pubblico) in un token JWT per verificare se corrisponde al
nome del servizio Endpoints, che corrisponde al campo host nel
documento OpenAPI.
Se l'attestazione "aud" e il nome del servizio Endpoints sono diversi:
Verifica che l'attestazione
"aud"nel JWT corrisponda a uno dei valorix-google-audiencesspecificati nel documento OpenAPI.Assicurati che
x-google-audiencesex-google-issuersi trovino nello stesso oggettosecurityDefinitionsnel documento OpenAPI.
Se l'attestazione "aud" e il nome del servizio Endpoints sono uguali,
il fornitore di servizi email convalida il pubblico e
ignora i valori
x-google-audiences
nel documento OpenAPI. 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 pubblico
valido.