Diese Seite gilt für Apigee und Apigee Hybrid.
Apigee Edge-Dokumentation aufrufen
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.
Diese Richtlinie ist eine Standardrichtlinie, die in jeder Umgebung bereitgestellt werden kann. Informationen zu Richtlinientypen und zur Verfügbarkeit bei jedem Umgebungstyp finden Sie unter Richtlinientypen.
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 | Standard | Presence |
---|---|---|---|
Name |
Der interne Name der Richtlinie. Folgende Zeichen sind im Namen zulässig: A-Z0-9._\-$ % . Die Apigee-Benutzeroberfläche erzwingt jedoch zusätzliche Einschränkungen, z. B. das automatische Entfernen nicht alphanumerischer Zeichen.
Optional können Sie das Element |
– | 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 |
false | Optional |
aktiviert | Legen Sie true fest, um die Richtlinie zu erzwingen.
Legen Sie |
true | Optional |
async | Dieses Attribut wurde verworfen. | false | Verworfen |
<DisplayName>
<DisplayName>Policy Display Name</DisplayName>
Wird zusätzlich zum Namensattribut verwendet, um die Richtlinie im Proxy-Editor der Apigee-Benutzeroberfläche 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. |
Presence | 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). |
Presence | Optional |
Typ | String |
Zulässige Werte | Ein Apigee-Ablaufvariablenname |
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 ist es auch in jwt.jwt-parse-token.claim.subject
verfügbar.
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 einen nbf-Anspruch 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. Mit decoded.claim.iat können Sie beispielsweise das Ausstellungsdatum des JWT in Sekunden seit der Epoche abrufen. 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 |
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 zurückgegebenen Fehlercodes und Fehlermeldungen beschrieben, die von Apigee festgelegt werden, wenn die 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 | Beheben |
---|---|---|---|
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. | build |
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. |
build |
Bereitstellungsfehler
Diese Fehler können auftreten, wenn Sie einen Proxy mit dieser Richtlinie bereitstellen.
Fehlername | Ursache | Beheben |
---|---|---|
InvalidEmptyElement |
Tritt auf, wenn die Ablaufvariable, die das zu decodierende JWT enthält, nicht im Element <Source> der Richtlinie angegeben ist. |
build |
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 "InvalidToken" |
JWT.failed |
Bei allen JWT-Richtlinien wird im Fall eines Fehlers dieselbe Variable festgelegt. | JWT.failed = true |
Beispiel für eine Fehlerantwort
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 "InvalidToken")</Condition> </Step> <Condition>JWT.failed=true</Condition> </FaultRule> </FaultRules>