Decodifica della risoluzione dei problemi relativi agli errori di runtime JWT

Stai visualizzando la documentazione di Apigee e Apigee hybrid.
Visualizza la documentazione di Apigee Edge.

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

  1. Identifica la variabile specificata nell'elemento <Source> del criterio Decodifica JWT. Questa variabile deve contenere il JWT.

    Ecco un esempio di criteri 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 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://$EXTERNAL_IP/v1/decodeJWT" -H "Authorization: Bearer eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM"
    

    dove $EXTERNAL_IP è l'indirizzo IP del bilanciatore del carico esterno. Questo indirizzo IP è esposto a internet. Per saperne di più, consulta Personalizzare il routing dell'accesso.

    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 Decode 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 passare un JWT valido con il formato header.payload.signature. Per farlo, effettua la chiamata API utilizzando il comando cURL come segue:

curl -v "http://$EXTERNAL_IP/v1/decodeJWT" -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM"

dove $EXTERNAL_IP è l'indirizzo IP del bilanciatore del carico esterno. Questo indirizzo IP è esposto a internet. Per saperne di più, consulta Personalizzare il routing dell'accesso.

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 è:

  • al di fuori dell'ambito (non disponibile nel flusso specifico in cui viene eseguita la policy) 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 criteri 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 eseguita la policy Decodifica JWT.

  3. Se la variabile è:

    • al di fuori dell'ambito (non disponibile nel flusso specifico in cui viene eseguita la policy) o
    • non può essere risolto (non è definito)

    allora è questa la causa dell'errore.

    Nell'esempio di richiesta API riportato di seguito, il JWT non viene trasmesso nell'intestazione della richiesta di autorizzazione dall'utente.

    curl -v "http://$EXTERNAL_IP/v1/decodeJWT"
    

dove $EXTERNAL_IP è l'indirizzo IP del bilanciatore del carico esterno. Questo indirizzo IP è esposto a internet. Per saperne di più, consulta Personalizzare il routing dell'accesso.

Because the authorization request header is not passed, the Decode JWT policy fails with the error:

```
"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 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://$EXTERNAL_IP/v1/decodeJWT" -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM"

dove $EXTERNAL_IP è l'indirizzo IP del bilanciatore del carico esterno. Questo indirizzo IP è esposto a internet. Per saperne di più, consulta Personalizzare il routing dell'accesso.