Fehlerbehebung beim Dekodieren von JWT-Laufzeitfehlern

Sie lesen die Dokumentation zu Apigee Edge.
Sehen Sie sich die Apigee X-Dokumentation an.
info

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://<org>-<env>.apigee.net/v1/decodeJWT" -H "Authorization: Bearer eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM"
    

    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://<org>-<env>.apigee.net/v1/decodeJWT" -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM"

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://<org>-<env>.apigee.net/v1/decodeJWT"
    

    Da der Autorisierungsanfrage-Header nicht übergeben wird, schlägt die DecodeJWT-Richtlinie mit folgendem Fehler fehl:

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

Auflö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://<org>-<env>.apigee.net/v1/decodeJWT" -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM"