Stai visualizzando la documentazione di Apigee e Apigee hybrid.
Visualizza la documentazione di
Apigee Edge.
FailedToDecode
Codice di errore
steps.jwt.FailedToDecode
Corpo della risposta di errore
{
"fault": {
"faultstring": "Failed to Decode Token: policy({0})",
"detail": {
"errorcode": "steps.jwt.FailedToDecode"
}
}
}
Causa
Questo errore si verifica se il token JWT (JSON Web Token) specificato nell'elemento <Source>
del criterio Decodifica JWT non ha un formato corretto, non è valido o non è decodificabile.
Un JWT correttamente strutturato deve contenere un'intestazione, un payload e una firma nel seguente formato: header.payload.signature
. Se al criterio DecodeJWT viene passato un JWT mancante di un componente, viene visualizzato l'errore. Ad esempio, se il JWT ha solo payload.signature
, ma manca il relativo header
, si verificherà un errore.
Diagnosi
Identifica la variabile specificata nell'elemento
<Source>
del criterio Decodifica JWT. Questa variabile deve contenere il JWT.Ecco un esempio di criterio JWT di decodifica:
<DecodeJWT name="JWT-Decode-HS256"> <DisplayName>JWT Verify HS256</DisplayName> <Source>request.header.authorization</Source> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> </DecodeJWT>
Nell'esempio precedente, il JWT deve essere contenuto nell'intestazione della richiesta di autorizzazione.
Esamina la variabile identificata nel passaggio 1 e verifica che il JWT che contiene sia valido. Se il token JWT inserito non è valido, è la causa dell'errore.
Nell'esempio di richiesta API riportata di seguito, il JWT di input viene passato nell'intestazione della richiesta di autorizzazione:
curl -v "http://$EXTERNAL_IP/v1/decodeJWT" -H "Authorization: Bearer eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM"
dove
$EXTERNAL_IP
è l'indirizzo IP del bilanciatore del carico esterno. Questo indirizzo IP è esposto a internet. Per ulteriori informazioni, vedi Personalizzare il routing degli accessiUn'attenta analisi del JWT mostra che ha il formato
payload.signature
, che non è valido. Il formato previsto del JWT èheader.payload.signature
. Di conseguenza, il criterio Decodifica JWT non va a buon fine con l'errore:"faultstring": "Failed to Decode Token: policy({0})"
Risoluzione
Assicurati che il token JWT passato al criterio Decodifica JWT contenga tutti e tre gli elementi, sia formattato correttamente e sia decodificabile.
Per correggere l'esempio mostrato sopra, puoi trasmettere un JWT valido con il formato header.payload.signature
. A questo scopo, effettua la chiamata API utilizzando il comando cURL come segue:
curl -v "http://$EXTERNAL_IP/v1/decodeJWT" -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM"
Dove $EXTERNAL_IP
è l'indirizzo IP del bilanciatore del carico esterno.
Questo indirizzo IP è esposto a internet. Per ulteriori informazioni, consulta
Personalizzare il routing dell'accesso.
InvalidToken
Codice di errore
steps.jwt.InvalidToken
Corpo della risposta di errore
{
"fault": {
"faultstring": "Invalid token: policy({0})",
"detail": {
"errorcode": "steps.jwt.InvalidToken"
}
}
}
Causa
Questo errore si verifica se la variabile di flusso specificata nell'elemento <Source>
del criterio di decodifica JWT è:
- fuori ambito (non disponibile nel flusso specifico in cui viene eseguito il criterio) o
- non può essere risolto (non è definito)
Diagnosi
Identifica la variabile specificata nell'elemento
<Source>
del criterio Decodifica JWT. Questa variabile deve contenere il JWT.Ecco un esempio di criterio JWT di decodifica:
<DecodeJWT name="JWT-Decode-HS256"> <DisplayName>JWT Verify HS256</DisplayName> <Source>request.header.authorization</Source> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> </DecodeJWT>
Nell'esempio precedente, l'intestazione della richiesta di autorizzazione deve contenere il JWT.
Determina se la variabile identificata nel passaggio 1 è definita e disponibile nel flusso in cui viene eseguito il criterio Decodifica JWT.
Se la variabile è:
- fuori ambito (non disponibile nel flusso specifico in cui viene eseguito il criterio) o
- non può essere risolto (non è definito)
questa è la causa dell'errore.
Nella richiesta API di esempio riportata di seguito, il JWT non viene passato dall'utente nell'intestazione della richiesta di autorizzazione.
curl -v "http://$EXTERNAL_IP/v1/decodeJWT"
Dove $EXTERNAL_IP
è l'indirizzo IP del bilanciatore del carico esterno.
Questo indirizzo IP è esposto a internet. Per ulteriori informazioni, vedi
Personalizzare il routing degli accessi
Because the authorization request header is not passed, the Decode JWT policy fails with the error:
```
"faultstring": "Invalid token: policy({0})"
```
Risoluzione
Assicurati che la variabile a cui viene fatto riferimento nell'elemento <Source>
del criterio Decodifica JWT sia definita, contenga un JWT valido (decodificabile) e sia disponibile nel flusso specifico in cui viene eseguito il criterio Decodifica JWT.
Per correggere l'esempio mostrato sopra, puoi passare un JWT valido nell'intestazione di autorizzazione della richiesta. A questo scopo, effettua la chiamata API utilizzando il comando cURL come segue:
curl -v "http://$EXTERNAL_IP/v1/decodeJWT" -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM"
dove $EXTERNAL_IP
è l'indirizzo IP del bilanciatore del carico esterno.
Questo indirizzo IP è esposto a internet. Per ulteriori informazioni, vedi
Personalizzare il routing degli accessi