Risoluzione dei problemi di decodifica degli errori di runtime JWT

Stai visualizzando la documentazione relativa a Apigee e Apigee ibrido.
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 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 strutturato correttamente deve contenere intestazione, payload e firma nel seguente formato: header.payload.signature. Se nel JWT passato al criterio DecodeJWT manca una parte, riceverai l'errore. Ad esempio, se il JWT ha solo payload.signature, ma manca il relativo header, si verificherà un errore.

Diagnosi

  1. Identifica la variabile specificata nell'elemento <Source> del criterio JWT di decodifica. Questa variabile deve contenere il 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 verifica che il JWT che contiene sia valido. Se il JWT di input non è valido, questo è la causa dell'errore.

    Nell'esempio di richiesta API 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 ulteriori informazioni, consulta Configurare il routing.

    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, il criterio di decodifica JWT non riesce e restituisce 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://$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 ulteriori informazioni, consulta Configurare il routing.

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 di 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 JWT di decodifica. Questa variabile deve contenere il 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. Determinare 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) o
    • non può essere risolto (non è definito)

    questa è la causa dell'errore.

    Nell'esempio di richiesta API riportato di seguito, il JWT non viene passato 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 ulteriori informazioni, consulta Configurare il routing.

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 JWT di decodifica sia definita, contenga un JWT valido (decodabile) e che sia disponibile nel flusso specifico in cui viene eseguito il criterio JWT di decodifica.

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://$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 ulteriori informazioni, consulta Configurare il routing.