Stai visualizzando la documentazione di Apigee Edge.
Consulta la
documentazione di Apigee X. info
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 JSON Web Token (JWT) specificato nell'elemento <Source> del criterio Decodifica JWT non è valido, non è formattato correttamente o non è decodificabile.
Un JWT strutturato correttamente deve contenere un'intestazione, un payload e una firma nel seguente formato: header.payload.signature. Se il JWT passato al criterio DecodeJWT non ha una parte componente, riceverai l'errore. Ad esempio, se il JWT ha solo payload.signature, ma manca header, si verificherà l'errore.
Diagnosi
Identifica la variabile specificata nell'elemento
<Source>del criterio Decodifica JWT. Questa variabile deve contenere il JWT.Ecco un esempio di criterio Decode JWT:
<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 se il JWT che contiene è valido. Se il JWT di input non è valido, questo è il motivo 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 ha il formato
payload.signature, che non è valido. Il formato previsto del JWT èheader.payload.signature. Di conseguenza, la policy Decodifica JWT non riesce e viene visualizzato l'errore :"faultstring": "Failed to Decode Token: policy({0})"
Risoluzione
Assicurati che il 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 inserire un JWT valido con il formato header.payload.signature. Per farlo, 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 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 Decode JWT:
<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 eseguita la policy 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)
allora è questa la causa dell'errore.
Nella richiesta API di esempio riportata di seguito, l'utente non trasmette il JWT nell'intestazione della richiesta di autorizzazione.
curl -v "http://<org>-<env>.apigee.net/v1/decodeJWT"
Poiché l'intestazione della richiesta di autorizzazione non viene trasmessa, il criterio Decodifica JWT non va a buon fine e viene visualizzato l'errore:
"faultstring": "Invalid token: policy({0})"
Risoluzione
Assicurati che la variabile a cui viene fatto riferimento nell'elemento <Source> del criterio Decode JWT sia definita, contenga un JWT valido (decodificabile) e sia disponibile nel flusso specifico in cui viene eseguito il criterio Decode JWT.
Per correggere l'esempio mostrato sopra, puoi passare un JWT valido nell'intestazione di autorizzazione della richiesta. Per farlo, 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"