Stai visualizzando la documentazione di Apigee Edge.
Vai alla 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 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 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 contiene 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 di decodifica 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 controlla se il JWT in essa contenuto è valido. Se il token JWT inserito non è valido, è la causa dell'errore.
Nella richiesta API di esempio riportata di seguito, il token 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 dimostra 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 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 passare un JWT valido con il formato header.payload.signature
. Per farlo, effettua la chiamata all'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 di decodifica 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 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)
allora è 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 Decodifica JWT non va a buon fine con l'errore:
"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 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"