Risoluzione dei problemi di decodifica degli errori di runtime JWT

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

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

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

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

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

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