Quando un'applicazione client include un token web JSON (JWT) in una richiesta a un'API, 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. Consulta il documento RFC 7519 per ulteriori informazioni sui JWT.
Errore:401: Jwt issuer is not configured
Questo può accadere quando si esegue 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 IAM di controllo dell'accesso Cloud Run e non da ESPv2. IAM può 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 una delle seguenti opzioni:"RS256"
,"HS256"
,"RS384"
,"HS384"
,"RS512"
o"HS512"
- Controlla il tipo di dati dei seguenti campi (se presenti) nel payload JWT:
- Le rivendicazioni
"iat"
(emesse),"exp"
(ora di scadenza) e"nbf"
(non prima) sono numeri maggiori di 0 e non stringhe. - I campi
"sub"
(oggetto),"iss"
(emittente) e"jti"
(ID JWT) sono stringhe. - La rivendicazione di
"aud"
(segmento di pubblico) è una stringa o un array di stringhe. - Assicurati che le seguenti rivendicazioni siano presenti nel payload JWT:
"sub"
(oggetto),"iss"
(emittente) e"aud"
(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" }
TIME_CONSTRAINT_FAILURE
Utilizza jwt.io per decodificare il JWT e assicurati che:
- La rivendicazione (data di scadenza)
"exp"
esiste. - Il valore della rivendicazione
"exp"
(ora di scadenza) è una data e un'ora future. La data e l'ora correnti devono essere precedenti alla data e all'ora di scadenza indicate nella rivendicazione"exp"
. - La rivendicazione di
"nbf"
(non prima) (se presente) è una data e un'ora passate. La data e l'ora correnti devono essere successive o uguali alla data e all'ora elencate nella rivendicazione"nbf"
.
UNKNOWN
Utilizza jwt.io per decodificare il JWT e assicurati che:
- Se la rivendicazione di
"iss"
(emittente) è un indirizzo email, le rivendicazioni di"sub"
(oggetto) e di"iss"
devono essere le stesse. Questo serve a garantire che per gli emittenti delle email il JWT venga emesso personalmente.
Errore: KEY_RETRIEVAL_ERROR
- Verifica che l'URI della chiave pubblica specificato nel campo
x-google-jwks_uri
nel documento OpenAPI sia corretto e valido.
Errore: Issuer not allowed
Verifica che la rivendicazione di
"iss"
(emittente) nel token JWT corrisponda al campox-google-issuer
nella sezionesecurityDefinitions
dell'oggetto di sicurezza nel 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 la rivendicazione "aud"
(pubblico) in un token JWT per vedere se corrisponde al nome del servizio endpoint, che corrisponde al campo host
nel documento OpenAPI.
Se la rivendicazione di "aud"
e il nome del servizio Endpoints sono diversi:
Verifica che la rivendicazione di
"aud"
nel JWT corrisponda a uno dei valorix-google-audiences
specificati nel documento OpenAPI.Assicurati che
x-google-audiences
ex-google-issuer
si trovino nello stesso oggettosecurityDefinitions
nel documento OpenAPI.
Se la rivendicazione di "aud"
e il nome del servizio Endpoints sono gli stessi, l'ESP convalida il pubblico e ignora i valori x-google-audiences
nel documento OpenAPI. Ad esempio, se il nome del tuo 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.