Fehlerbehebung beim Dekodieren von JWT-Laufzeitfehlern

Sie lesen gerade die Dokumentation zu Apigee und Apigee Hybrid.
Apigee Edge-Dokumentation aufrufen.

FailedToDecode

Fehlercode

steps.jwt.FailedToDecode

Fehlerantworttext

{
  "fault": {
    "faultstring": "Failed to Decode Token: policy({0})",
    "detail": {
       "errorcode": "steps.jwt.FailedToDecode"
     }
  }
}

Ursache

Dieser Fehler tritt auf, wenn das JSON Web Token (JWT), das im <Source>-Element der Decode-JWT-Richtlinie angegeben ist, fehlerhaft, ungültig oder anderweitig nicht dekodierbar ist.

Ein korrekt strukturiertes JWT sollte einen Header, eine Nutzlast und eine Signatur im folgenden Format enthalten: header.payload.signature. Wenn im JWT, das an die DecodeJWT-Richtlinie übergeben wird, ein Komponententeil fehlt, erhalten Sie eine Fehlermeldung. Wenn das JWT beispielsweise nur payload.signature hat, aber dessen header fehlt, tritt der Fehler auf.

Diagnose

  1. Identifizieren Sie die Variable, die im Element <Source> der Decode-JWT-Richtlinie angegeben ist. Diese Variable sollte das JWT enthalten.

    Hier ein Beispiel für eine DecodeJWT-Richtlinie:

    <DecodeJWT name="JWT-Decode-HS256">
        <DisplayName>JWT Verify HS256</DisplayName>
        <Source>request.header.authorization</Source>
        <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    </DecodeJWT>
    

    Im obigen Beispiel sollte das JWT im Header der Autorisierungsanfrage enthalten sein.

  2. Sehen Sie sich die in Schritt 1 angegebene Variable an und prüfen Sie, ob das enthaltene JWT gültig ist. Wenn das Eingabe-JWT nicht gültig ist, ist dies die Ursache des Fehlers.

    In der folgenden Beispiel-API-Anfrage wird das Eingabe-JWT im Header der Autorisierungsanfrage übergeben:

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

    Dabei ist $EXTERNAL_IP die IP-Adresse des externen Load-Balancers. Diese IP-Adresse ist im Internet sichtbar. Weitere Informationen finden Sie unter Zugriffs-Routing anpassen.

    Eine Abschlussprüfung des JWT zeigt, dass das Format payload.signature ungültig ist. Das erwartete Format des JWT ist header.payload.signature. Deshalb schlägt die Decodierung der JWT-Richtlinie mit folgendem Fehler fehl:

    "faultstring": "Failed to Decode Token: policy({0})"
    

Lösung

Prüfen Sie, ob das an die Decode-JWT-Richtlinie übergebene JWT alle drei Elemente enthält korrekt formatiert sowie decodierbar ist.

Um das oben dargestellte Beispiel zu korrigieren, können Sie ein gültiges JWT im Format header.payload.signature übergeben. Dazu führen Sie den API-Aufruf mit dem URL-Befehl so aus:

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

Dabei ist $EXTERNAL_IP die IP-Adresse des externen Load-Balancers. Diese IP-Adresse ist im Internet sichtbar. Weitere Informationen finden Sie unter Zugriffsrouting anpassen.

InvalidToken

Fehlercode

steps.jwt.InvalidToken

Fehlerantworttext

{
  "fault": {
    "faultstring": "Invalid token: policy({0})",
    "detail": {
      "errorcode": "steps.jwt.InvalidToken"
     }
  }
}

Ursache

Dieser Fehler tritt auf, wenn die im <Source>-Element der Decode-JWT-Richtlinie angegebene Ablaufvariable folgende ist:

  • außerhalb des Geltungsbereichs (nicht in dem spezifischen Ablauf verfügbar, in dem die Richtlinie ausgeführt wird) oder
  • Kann nicht aufgelöst werden (nicht definiert)

Diagnose

  1. Identifizieren Sie die Variable, die im Element <Source> der Decode-JWT-Richtlinie angegeben ist. Diese Variable sollte das JWT enthalten.

    Hier ein Beispiel für eine DecodeJWT-Richtlinie:

    <DecodeJWT name="JWT-Decode-HS256">
        <DisplayName>JWT Verify HS256</DisplayName>
        <Source>request.header.authorization</Source>
        <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    </DecodeJWT>
    

    Im obigen Beispiel sollte der Header der Autorisierungsanfrage das JWT enthalten.

  2. Ermitteln Sie, ob die in Schritt 1 ermittelte Variable definiert ist und in dem Ablauf verfügbar ist, in dem die Decode-JWT-Richtlinie ausgeführt wird.

  3. Wenn die Variable entweder:

    • außerhalb des Gültigkeitsbereichs liegt (nicht in dem spezifischen Ablauf verfügbar ist, in dem die Richtlinie ausgeführt wird) oder
    • nicht aufgelöst werden kann (nicht definiert ist)

    dann ist das die Ursache für den Fehler.

    In der folgenden API-Beispielanfrage wird das JWT nicht vom Nutzer im Header der Autorisierungsanforderung übergeben.

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

Dabei ist $EXTERNAL_IP die IP-Adresse des externen Load-Balancers. Diese IP-Adresse ist im Internet sichtbar. Weitere Informationen finden Sie unter Zugriffsrouting anpassen.

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

```
"faultstring": "Invalid token: policy({0})"
```

Lösung

Achten Sie darauf, dass die Variable, auf die im <Source>-Element der Decode-JWT-Richtlinie verwiesen wird, definiert ist, ein gültiges (decodierbares) JWT enthält und in dem Ablauf verfügbar ist, in dem die Decode-JWT-Richtlinie ausgeführt wird.

Um das oben dargestellte Beispiel zu korrigieren, können Sie ein gültiges JWT im Anfrageautorisierungs-Header übergeben. Dazu führen Sie den API-Aufruf mit dem URL-Befehl so aus:

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

Dabei ist $EXTERNAL_IP die IP-Adresse des externen Load-Balancers. Diese IP-Adresse ist im Internet sichtbar. Weitere Informationen finden Sie unter Zugriffsrouting anpassen.