Risoluzione degli errori di runtime per la decodifica JWT

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

  1. 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.

  2. 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

  1. 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.

  2. Determina se la variabile identificata nel passaggio 1 è definita e disponibile nel flusso in cui viene eseguito il criterio JWT di decodifica.

  3. 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"