Stai visualizzando la documentazione di Apigee Edge.
Vai alla
documentazione di Apigee X. informazioni
FailedToDecode
Codice di errore
steps.jwt.FailedToDecode
Corpo della risposta all'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 JWT di decodifica non è nel formato corretto, non è valido o non può essere decodificato.
Un JWT strutturato correttamente deve contenere un'intestazione, un payload e una firma nel seguente formato: header.payload.signature
. Se nel criterio JWT passato al criterio DecodeJWT manca una parte del componente, riceverai l'errore. Ad esempio, se il JWT ha solo payload.signature
, ma non header
, si verifica un errore.
Diagnostica
Identifica la variabile specificata nell'elemento
<Source>
del criterio JWT di decodifica. Questa variabile deve contenere il valore 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 controlla se il JWT che contiene è valido. Se il JWT di input non è valido, è questa la causa dell'errore.
Nella richiesta API di esempio 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 il formato
payload.signature
non è valido. Il formato previsto del JWT èheader.payload.signature
. Di conseguenza, il criterio JWT di decodifica ha esito negativo e genera 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 all'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 JWT di decodifica è:
- fuori ambito (non disponibile nel flusso specifico in cui viene eseguito il criterio) oppure
- non può essere risolto (non è definito)
Diagnostica
Identifica la variabile specificata nell'elemento
<Source>
del criterio JWT di decodifica. Questa variabile deve contenere il valore 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 JWT di decodifica.
Se la variabile è:
- fuori ambito (non disponibile nel flusso specifico in cui viene eseguito il criterio) oppure
- non può essere risolto (non è definito)
è questa la causa dell'errore.
Nella richiesta API di esempio riportata di seguito, il JWT non viene trasmesso dall'utente nell'intestazione della richiesta di autorizzazione.
curl -v "http://<org>-<env>.apigee.net/v1/decodeJWT"
Poiché l'intestazione della richiesta di autorizzazione non viene passata, il criterio JWT di decodifica ha esito negativo e genera 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 (decodificabile) e sia disponibile nel flusso specifico in cui viene eseguito il criterio JWT di decodifica.
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://<org>-<env>.apigee.net/v1/decodeJWT" -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM"