Zasada dekodowania JWT

Przeglądasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X.
Informacje

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 <displayname></displayname>, aby oznaczyć zasadę w edytorze serwera proxy interfejsu zarządzania inną nazwą w języku naturalnym.

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 true, aby wykonywanie przepływu było kontynuowane nawet po awarii zasady.

false Opcjonalnie
włączone Ustaw jako true, aby wymuszać zasadę.

Ustaw wartość false, aby „wyłączyć” zasadę. Zasada nie będzie egzekwowana, nawet jeśli pozostanie dołączona do procesu.

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ąć.
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ć.

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.

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

Kody błędów zasad JWT

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>