DecodeJWT-Richtlinie

Sie sehen die Dokumentation zu Apigee Edge.
Zur Apigee X-Dokumentation
weitere Informationen

Was

Entschlüsselt ein JWT, ohne die Signatur im JWT zu prüfen. Dies ist besonders nützlich, wenn es in Kombination mit der VerifyJWT-Richtlinie verwendet wird, wenn der Wert einer Anforderung innerhalb des JWT bekannt sein muss, bevor die Signatur des JWT verifiziert wird.

Die Richtlinie JWT decodieren funktioniert unabhängig vom Algorithmus, mit dem das JWT signiert wurde. Eine detaillierte Einführung finden Sie unter Übersicht über JWS- und JWT-Richtlinien.

Video

In diesem kurzen Video erfahren Sie, wie ein JWT decodiert wird.

Beispiel: JWT decodieren

Die unten gezeigte Richtlinie decodiert ein JWT aus der Ablaufvariable var.jwt. Diese Variable muss vorhanden sein und eine ausführbare (decodierbare) JWT enthalten. Die Richtlinie kann die JWT aus einer beliebigen Ablaufvariablen abrufen.

<DecodeJWT name="JWT-Decode-HS256">
    <DisplayName>JWT Verify HS256</DisplayName>
    <Source>var.jwt</Source>
</DecodeJWT>

Die Richtlinie schreibt ihre Ausgabe in Kontextvariablen, damit nachfolgende Richtlinien oder Bedingungen im API-Proxy diese Werte prüfen können. Eine Liste der von dieser Richtlinie festgelegten Variablen finden Sie unter Abrufvariabeln.

Elementreferenz für JWT decodieren

In der Richtlinienreferenz werden die Elemente und Attribute der Richtlinie JWT dekodieren beschrieben.

Attribute, die auf das oberste Element angewendet werden

<DecodeJWT name="JWT" continueOnError="false" enabled="true" async="false">

Die folgenden Attribute gelten für alle übergeordneten Richtlinienelemente.

Attribut Beschreibung Standardeinstellung Präsenz
name Der interne Name der Richtlinie. Folgende Zeichen sind im Namen zulässig: A-Z0-9._\-$ %. Die Edge-Verwaltungs-UI erzwingt jedoch zusätzliche Einschränkungen, z. B. das automatische Entfernen nicht alphanumerischer Zeichen.

Optional können Sie das Element <displayname></displayname> verwenden, um die Richtlinie im Proxy-Editor der Verwaltungs-UI mit einem anderen Namen in einer natürlichen Sprache zu versehen.

Erforderlich
continueOnError Legen Sie false fest, um einen Fehler zurückzugeben, wenn eine Richtlinie fehlschlägt. Dies ist für die meisten Richtlinien das erwartete Verhalten.

Legen Sie true fest, damit die Ablaufausführung auch nach dem Fehlschlagen einer Richtlinie fortgesetzt wird.

false Optional
aktiviert Setzen Sie den Wert auf true, um die Richtlinie zu erzwingen.

Legen Sie false fest, um die Richtlinie zu "deaktivieren". Die Richtlinie wird nicht erzwungen, selbst wenn sie mit einem Ablauf verknüpft ist.

true Optional
async Dieses Attribut wurde verworfen. false Eingestellte Funktionen

<DisplayName>

<DisplayName>Policy Display Name</DisplayName>

Wird zusätzlich zum Namensattribut verwendet, um die Richtlinie im Proxy-Editor der Verwaltungs-UI mit einem anderen Namen in einer natürlichen Sprache zu versehen.

Standard Wenn Sie dieses Element weglassen, wird der Wert des Namensattributs der Richtlinie verwendet.
Präsenz Optional
Typ String

<Source>

<Source>jwt-variable</Source>

Gibt, sofern vorhanden, die Ablaufvariable an, in der die Richtlinie das zu decodierende JWT findet.

Standard request.header.authorization (Wichtige Informationen zur Standardeinstellung finden Sie im Hinweis oben).
Präsenz Optional
Typ String
Zulässige Werte Ein Edge-Flow-Variablenname

Ablaufvariablen

Bei Erfolg werden bestimmen die Richtlinien JWT prüfen und JWT dekodieren entsprechend folgendem Muster Kontextvariablen:

jwt.{policy_name}.{variable_name}

Beispiel: Lautet der Richtlinienname jwt-parse-token, so speichert die Richtlinie das im JWT angegebene Subjekt in dieser Kontextvariable: jwt.jwt-parse-token.decoded.claim.sub (Aus Gründen der Abwärtskompatibilität wird es auch in jwt.jwt-parse-token.claim.subject verfügbar sein.)

Variablenname Beschreibung
claim.audience Die JWT-Zielgruppenanforderung. Dieser Wert kann ein String oder ein Array von Strings sein.
claim.expiry Ablaufdatum bzw. Ablaufzeit in Millisekunden seit der Epoche.
claim.issuedat Datum des Tokens in Millisekunden seit der Epoche.
claim.issuer Anspruch des JWT-Ausstellers.
claim.notbefore Wenn das JWT eine nbf-Anforderung enthält, enthält diese Variable den Wert, ausgedrückt in Millisekunden seit der Epoche.
claim.subject Anforderung des JWT-Betreffs.
claim.name Der Wert des in der Nutzlast benannten Anspruchs (Standard oder Zusätzlich). Eines der Elemente wird für jeden Anspruch in der Nutzlast festgelegt.
decoded.claim.name Der JSON-Parsewert der benannten Anforderung (Standard oder zusätzlicher) in der Nutzlast. Eine Variable wird für jeden Anspruch in der Nutzlast festgelegt. Du kannst beispielsweise decoded.claim.iat verwenden, um die Ausgabe zum Zeitpunkt des JWT abzurufen, ausgedrückt in Sekunden seit der Epoche. Sie können auch die Flow-Variablen claim.name verwenden. Dies ist jedoch die empfohlene Variable für den Zugriff auf eine Anforderung.
decoded.header.name JSON-Parsingwert eines Headers in der Nutzlast. Für jeden Header in der Nutzlast wird eine Variable festgelegt. Sie können auch die Flow-Variablen header.name verwenden. Dies ist jedoch die empfohlene Variable für den Zugriff auf einen Header.
expiry_formatted Ablaufdatum und -zeit als formatierter String. Beispiel: 2017-09-28T21:30:45.000+0000
header.algorithm Der für das JWT verwendete Signaturalgorithmus. Zum Beispiel RS256, HS384 usw. Weitere Informationen finden Sie unter Headerparameter (Algorithmus).
header.kid Die Schlüssel-ID, wenn sie beim Generieren des JWT hinzugefügt wurde. Weitere Informationen zur Überprüfung eines JWT finden Sie auch unter "JSON-Webschlüsselsatz verwenden (JWKS)" unter JWT-Richtlinienübersicht. Weitere Informationen finden Sie unter Header-Parameter (Key ID).
header.type Wird auf JWT festgelegt.
header.name Der Wert des benannten Headers (Standard oder Zusätzlich). Eines der Elemente wird für jeden zusätzlichen Header im Header-Teil des JWT bestimmt.
header-json Die Kopfzeile im JSON-Format.
is_expired Richtig oder falsch?
payload-claim-names Ein Array von Ansprüchen, vom JWT unterstützt.
payload-json
Die Nutzlast im JSON-Format.
seconds_remaining Anzahl der Sekunden bis zum Ablauf des Tokens. Ist das Token abgelaufen, ist diese Zahl negativ.
time_remaining_formatted Die verbleibende Zeit bis zum Ablauf des Tokens als formatierter String. Beispiel: 00:59:59.926
valid Im Fall von VerifyJWT ist diese Variable "true", wenn die Signatur verifiziert wurde. Die aktuelle Zeit ist entsprechend vor Ablauf des Tokens bzw. nach dem Token-Wert "notBefore", sofern vorhanden. Ansonsten ist die Variable "false".

Im Fall von DecodeJWT ist die Variable nicht festgelegt.

Fehlerreferenz

In diesem Abschnitt werden die Fehlercodes und Fehlermeldungen beschrieben, die zurückgegeben werden, sowie die Fehlervariablen, die von Edge festgelegt werden, wenn diese Richtlinie einen Fehler auslöst. Diese Informationen sind wichtig, wenn Sie Fehlerregeln zur Verarbeitung von Fehlern entwickeln. Weitere Informationen finden Sie unter Was Sie über Richtlinienfehler wissen müssen und Fehler beheben.

Laufzeitfehler

Diese Fehler können bei Ausführung der Richtlinie auftreten.

Fehlercode HTTP-Status Ursache Problembehebung
steps.jwt.FailedToDecode 401 Tritt auf, wenn die Richtlinie das JWT nicht decodieren kann. Das JWT ist möglicherweise fehlerhaft oder ungültig oder anderweitig nicht decodierbar.
steps.jwt.FailedToResolveVariable 401 Tritt auf, wenn die im Element <Source> der Richtlinie angegebene Flussvariable nicht vorhanden ist.
steps.jwt.InvalidToken 401 Tritt auf, wenn die im Element <Source> der Richtlinie angegebene Ablaufvariable den Gültigkeitsbereich überschreitet oder nicht aufgelöst werden kann.

Bereitstellungsfehler

Diese Fehler können auftreten, wenn Sie einen Proxy mit dieser Richtlinie bereitstellen.

Fehlername Ursache Beheben
InvalidEmptyElement Tritt auf, wenn die Flussvariable, die das zu decodierende JWT enthält, nicht im Element <Source> der Richtlinie angegeben ist.

Fehlervariablen

Diese Variablen werden bei Laufzeitfehlern festgelegt. Weitere Informationen finden Sie unter Was Sie über Richtlinienfehler wissen müssen.

Variablen Wo Beispiel
fault.name="fault_name" fault_name ist der Name des Fehlers, der in der obigen Tabelle Laufzeitfehler aufgeführt ist. Der Fehlername ist der letzte Teil des Fehlercodes. fault.name Matches "TokenExpired"
JWT.failed Bei allen JWT-Richtlinien wird im Fall eines Fehlers dieselbe Variable festgelegt. JWT.failed = true

Beispiel für eine Fehlerantwort

JWT-Richtlinienfehlercodes

Bei der Fehlerbehandlung besteht die Best Practice darin, den errorcode-Teil der Fehlerantwort zu beachten. Verlassen Sie sich nicht auf den Text in faultstring. Er kann sich ändern.

Beispiel für eine Fehlerregel

    <FaultRules>
        <FaultRule name="JWT Policy Errors">
            <Step>
                <Name>JavaScript-1</Name>
                <Condition>(fault.name Matches "TokenExpired")</Condition>
            </Step>
            <Condition>JWT.failed=true</Condition>
        </FaultRule>
    </FaultRules>