Przeglądasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X. Informacje
![](https://docs.apigee.com/static/api-platform/images/icon_policy_security.jpg?hl=pl)
Co
Dekoduje token JWT bez weryfikacji podpisu w tym tokenie. Jest to najbardziej przydatne, gdy jest używane w połączeniu z zasadą Weryfikuj JWT, gdy wartość żądania z tokena JWT musi być znana przed zweryfikowaniem podpisu tokena JWT.
Zasada dekodowania JWT działa niezależnie od algorytmu użytego do podpisania tokena JWT. Szczegółowe informacje znajdziesz w omówieniu zasad JWS i JWT.
Wideo
Obejrzyj krótki film, aby dowiedzieć się, jak zdekodować token JWT.
Przykład: dekodowanie tokena JWT
Zasada przedstawiona poniżej dekoduje token JWT znaleziony w zmiennej przepływu var.jwt. Ta zmienna musi być obecna i zawierać działający (decodowalny) token JWT. Zasada może uzyskać token JWT z dowolnej zmiennej przepływu.
<DecodeJWT name="JWT-Decode-HS256"> <DisplayName>JWT Verify HS256</DisplayName> <Source>var.jwt</Source> </DecodeJWT>
Zasada zapisuje dane wyjściowe w zmiennych kontekstowych, aby kolejne zasady lub warunki w serwerze proxy interfejsu API mogły analizować te wartości. Listę zmiennych ustawionych przez tę zasadę znajdziesz w sekcji Zmienne przepływu.
Dokumentacja elementu dotycząca dekodowania tokena JWT
Dokumentacja zasad zawiera opis elementów i atrybutów zasady Decode JWT.
Atrybuty stosowane do elementu najwyższego poziomu
<DecodeJWT name="JWT" continueOnError="false" enabled="true" async="false">
Poniższe atrybuty są wspólne dla wszystkich elementów nadrzędnych zasad.
Atrybut | Opis | Domyślnie | Obecność |
---|---|---|---|
nazwa |
Wewnętrzna nazwa zasady. Znaki, których możesz używać w nazwie, są ograniczone do: A-Z0-9._\-$ % . Interfejs zarządzania brzegowymi wymusza jednak dodatkowe ograniczenia, takie jak automatyczne usuwanie znaków niealfanumerycznych.
Opcjonalnie możesz użyć elementu |
Nie dotyczy | Wymagane |
continueOnError |
Ustaw wartość false , aby zwracać błąd w przypadku niepowodzenia zasady. Jest to normalne działanie większości zasad.
Ustaw jako |
false | Opcjonalnie |
włączone |
Ustaw jako true , aby wymuszać zasadę.
Ustaw wartość |
prawda | Opcjonalnie |
async | Ten atrybut został wycofany. | false | Wycofano |
<DisplayName>
<DisplayName>Policy Display Name</DisplayName>
Użyj oprócz atrybutu name, aby oznaczyć zasadę w edytorze serwera proxy interfejsu zarządzania inną nazwą w języku naturalnym.
Domyślnie | Jeśli pominiesz ten element, zostanie użyta wartość atrybutu nazwa zasady. |
Obecność | Opcjonalnie |
Typ | Ciąg znaków |
<Źródło>
<Source>jwt-variable</Source>
Jeśli istnieje, określa zmienną przepływu, w której zasada ma znaleźć token JWT do zdekodowania.
Domyślnie | request.header.authorization (Ważne informacje o wartości domyślnej znajdziesz powyżej). |
Obecność | Opcjonalnie |
Typ | Ciąg znaków |
Prawidłowe wartości | Nazwa zmiennej przepływu Edge |
Zmienne przepływu
Gdy się uda, zasady Zweryfikuj JWT i Dekodowanie JWT ustawiają zmienne kontekstowe zgodnie z tym wzorcem:
jwt.{policy_name}.{variable_name}
Jeśli na przykład nazwa zasady to jwt-parse-token
, zasada będzie zapisywać w zmiennej kontekstowej jwt.jwt-parse-token.decoded.claim.sub
podmiot określony w tokenie JWT.
(Aby zapewnić zgodność wsteczną, będzie ona też dostępna w języku: jwt.jwt-parse-token.claim.subject
).
Nazwa zmiennej | Opis |
---|---|
claim.audience |
Deklaracja odbiorców JWT. Wartość może być ciągiem znaków lub tablicą ciągów znaków. |
claim.expiry |
Data i godzina ważności, wyrażone w milisekundach od początku epoki. |
claim.issuedat |
Data wydania tokena wyrażona w milisekundach od początku epoki. |
claim.issuer |
Deklaracja wydawcy JWT. |
claim.notbefore |
Jeśli token JWT zawiera deklaracja nbf, ta zmienna będzie zawierać wartość wyrażoną w milisekundach od początku epoki. |
claim.subject |
Deklaracja podmiotu JWT. |
claim.name |
Wartość nazwanego stwierdzenia (standardowego lub dodatkowego) w ładunku. Jeden z nich zostanie ustawiony dla każdego żądania w ładunku. |
decoded.claim.name |
Możliwe do analizy w formacie JSON wartość nazwanego żądania (standardowa lub dodatkowa) w ładunku. Po 1 zmiennej jest ustawiana dla każdego żądania w ładunku. Możesz na przykład użyć decoded.claim.iat , aby pobrać token JWT wydany w chwili jego wydania, wyrażony w sekundach od początku epoki. Chociaż możesz też używać zmiennych przepływu claim.name , jest to zalecana zmienna, której należy używać do uzyskiwania dostępu do deklaracji. |
decoded.header.name |
Poddawana analizie JSON wartość nagłówka w ładunku. Dla każdego nagłówka w ładunku ustawiana jest 1 zmienna. Chociaż możesz też używać zmiennych przepływu header.name , jest to zalecana zmienna, która pozwala uzyskiwać dostęp do nagłówka. |
expiry_formatted |
Data i godzina wygaśnięcia ważności w formacie zrozumiałym dla człowieka. Przykład: 2017-09-28T21:30:45.000+0000 |
header.algorithm |
Algorytm podpisywania używany w tokenie JWT. Na przykład RS256, HS384 itd. Więcej informacji znajdziesz w sekcji Parametr nagłówka(algorytm). |
header.kid |
Identyfikator klucza, jeśli został dodany podczas generowania tokena JWT. Aby dowiedzieć się, jak zweryfikować token JWT, zapoznaj się też z sekcją o korzystaniu z zestawu kluczy sieciowych JSON (JWKS) w omówieniu zasad JWT. Więcej informacji znajdziesz w sekcji Parametr nagłówka(identyfikator klucza). |
header.type |
Zostanie ustawiony na JWT . |
header.name |
Wartość nazwanego nagłówka (standardowa lub dodatkowa). Jeden z tych ustawień zostanie ustawiony dla każdego dodatkowego nagłówka w części nagłówka tokena JWT. |
header-json |
Nagłówek w formacie JSON. |
is_expired |
prawda lub fałsz |
payload-claim-names |
Tablica deklaracji obsługiwanych przez token JWT. |
payload-json |
Ładunek w formacie JSON.
|
seconds_remaining |
Liczba sekund do wygaśnięcia tokena. Jeśli token wygaśnie, ta liczba będzie ujemna. |
time_remaining_formatted |
Czas pozostały do wygaśnięcia tokena w postaci ciągu tekstowego zrozumiałego dla człowieka. Przykład: 00:59:59.926 |
valid |
W przypadku weryfikacji JWT ta zmienna ma wartość prawdziwa w momencie weryfikacji podpisu, a bieżący czas przypada przed wygaśnięciem tokena i po wartości notBefore tokena, jeśli występują. W przeciwnym razie ma wartość Fałsz.
W przypadku DecodeJWT ta zmienna nie jest ustawiona. |
Informacje o błędach
W tej sekcji opisujemy kody błędów i komunikaty o błędach, które są zwracane, oraz zmienne błędów ustawiane przez Edge, gdy ta zasada wywołuje błąd. Te informacje są ważne, jeśli opracowujesz reguły dotyczące błędów do obsługi takich błędów. Więcej informacji znajdziesz w sekcjach Co musisz wiedzieć o błędach zasad i Postępowanie w przypadku błędów.
Błędy w czasie wykonywania
Te błędy mogą wystąpić podczas wykonywania zasady.
Kod błędu | Stan HTTP | Przyczyna | Napraw |
---|---|---|---|
steps.jwt.FailedToDecode |
401 | Występuje, gdy zasada nie może zdekodować tokena JWT. Token JWT może być zniekształcony, nieprawidłowy lub z innego powodu nie można go usunąć. | build |
steps.jwt.FailedToResolveVariable |
401 | Występuje, gdy zmienna przepływu określona w elemencie <Source> zasady nie istnieje. |
|
steps.jwt.InvalidToken |
401 | Występuje, gdy zmienna przepływu określona w elemencie <Source> zasady jest poza zakresem lub nie można jej rozwiązać. |
build |
Błędy wdrażania
Te błędy mogą wystąpić podczas wdrażania serwera proxy zawierającego te zasady.
Nazwa błędu | Przyczyna | Napraw |
---|---|---|
InvalidEmptyElement |
Dzieje się tak, gdy zmienna przepływu zawierająca token JWT do zdekodowania nie jest określona w elemencie <Source> zasady.
|
build |
Zmienne błędów
Te zmienne są ustawiane, gdy wystąpi błąd środowiska wykonawczego. Więcej informacji znajdziesz w artykule Co musisz wiedzieć o błędach związanych z naruszeniem zasad.
Zmienne | Gdzie | Przykład |
---|---|---|
fault.name="fault_name" |
fault_name to nazwa błędu podana w tabeli Błędy środowiska wykonawczego powyżej. Nazwa błędu to ostatnia część kodu. | fault.name Matches "TokenExpired" |
JWT.failed |
Wszystkie zasady JWT ustawiają tę samą zmienną na wypadek niepowodzenia. | JWT.failed = true |
Przykładowa odpowiedź na błąd
W przypadku obsługi błędów najlepiej jest zablokować część errorcode
odpowiedzi błędu. Nie polegaj na tekście w polu faultstring
, ponieważ może się on zmienić.
Przykładowa reguła błędu
<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>