Stai visualizzando la documentazione di Apigee Edge.
Vai alla sezione
Documentazione di Apigee X. Informazioni
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 web JSON (JWT) specificato nell'elemento <Source>
del criterio Decode JWT non è nel formato corretto, non è valido o non è decodificabile in altro modo.
Un JWT strutturato correttamente deve contenere intestazione, payload e firma nel seguente formato: header.payload.signature
. Se nel JWT passato al criterio DecodeJWT manca una parte, riceverai 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 JWT di decodifica. 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 JWT di input non è valido, questo è 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://<org>-<env>.apigee.net/v1/decodeJWT" -H "Authorization: Bearer eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM"
Un esame approfondito del JWT mostra che ha il formato
payload.signature
che non è valido. Il formato previsto del JWT èheader.payload.signature
. Di conseguenza, il criterio di decodifica JWT non riesce e restituisce l'errore :"faultstring": "Failed to Decode Token: policy({0})"
Risoluzione
Assicurati che il JWT passato al criterio JWT di decodifica contenga tutti e tre gli elementi, che sia formattato correttamente e che 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://<org>-<env>.apigee.net/v1/decodeJWT" -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM"
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 JWT di decodifica. 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.
Determinare se la variabile identificata nel passaggio 1 è definita e disponibile nel flusso in cui viene eseguito il criterio JWT di decodifica.
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.
Nell'esempio di richiesta API riportata di seguito, il JWT non viene passato nell'intestazione della richiesta di autorizzazione dall'utente.
curl -v "http://<org>-<env>.apigee.net/v1/decodeJWT"
Poiché l'intestazione della richiesta di autorizzazione non viene passata, il criterio di decodifica JWT non riesce e restituisce l'errore:
"faultstring": "Invalid token: policy({0})"
Risoluzione
Assicurati che la variabile a cui viene fatto riferimento nell'elemento <Source>
del criterio JWT di decodifica sia definita, contenga un JWT valido (decodabile) e che sia disponibile nel flusso specifico in cui viene eseguito il criterio JWT di decodifica.
Per correggere l'esempio riportato sopra, puoi passare un JWT valido nell'intestazione dell'autorizzazione della richiesta. A questo scopo, effettua la chiamata API utilizzando il comando cURL come segue:
curl -v "http://<org>-<env>.apigee.net/v1/decodeJWT" -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM"