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=">
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" }
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"
.
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
x-google-jwks_uri
del documento OpenAPI sia corretto e valido.
Errore: Issuer not allowed
Verifica che l'attributo
"iss"
(issuer) nel token JWT corrisponda al campox-google-issuer
nella sezionesecurityDefinitions
dell'oggetto security nel documento OpenAPI.Nel documento OpenAPI, verifica che l'oggetto di sicurezza sia attivato per il metodo dell'API invocato.
Consulta il
file openapi.yaml di esempio
per un esempio di come descrivere la sicurezza a livello di metodo utilizzando
gli oggetti securityDefinition
e security
.
Errore: Audience not allowed
Confronta l'affermazione "aud"
(segmento di pubblico) in un token JWT per verificare se corrisponde al nome del servizio Endpoints, che corrisponde al campo host
nel documento OpenAPI.
Se l'affermazione "aud"
e il nome del servizio Endpoints sono diversi:
Verifica che l'affermazione
"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 l'affermazione "aud"
e il nome del servizio Endpoints sono uguali,
l'ESP convalida il segmento di 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 segmento di pubblico valido.