Zasady weryfikacji JWT

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

Co

Weryfikuje podpis tokena JWT odebrany od klientów lub innych systemów. Ta zasada wyodrębnia też deklaracje do zmiennych kontekstowych, aby kolejne zasady lub warunki mogły analizować te wartości w celu podejmowania decyzji dotyczących autoryzacji lub routingu. Szczegółowe informacje znajdziesz w omówieniu zasad JWS i JWT.

Gdy ta zasada jest uruchamiana, Edge sprawdza podpis tokena JWT i sprawdza, czy token JWT jest prawidłowy zgodnie z datą wygaśnięcia i czy wcześniejszy, jeśli taki istnieje. Zasada może też opcjonalnie weryfikować wartości konkretnych deklaracji tokena JWT, takie jak temat, wydawca, grupa odbiorców lub wartość dodatkowych deklaracji.

Jeśli token JWT jest zweryfikowany i prawidłowy, wszystkie zawarte w nim deklaracje są wyodrębniane do zmiennych kontekstowych do wykorzystania w kolejnych zasadach lub warunkach i może być kontynuowane. Jeśli nie można zweryfikować podpisu JWT lub token JWT jest nieprawidłowy z powodu jednej z sygnatur czasowych, przetwarzanie zostanie zatrzymane, a w odpowiedzi zostanie zwrócony błąd.

Informacje o częściach tokena JWT oraz sposobach ich szyfrowania i podpisywania znajdziesz w dokumencie RFC7519.

Wideo

Obejrzyj krótki film, aby dowiedzieć się, jak zweryfikować podpis tokena JWT.

Przykłady

Zweryfikuj token JWT podpisany za pomocą algorytmu HS256

Ta przykładowa zasada weryfikuje token JWT podpisany za pomocą algorytmu szyfrowania HS256 HMAC z użyciem sumy kontrolnej SHA-256. Token JWT jest przekazywany w żądaniu serwera proxy za pomocą parametru formularza o nazwie jwt. Klucz jest zawarty w zmiennej o nazwie private.secretkey. Obejrzyj film powyżej, aby zobaczyć pełny przykład, w tym, jak przesłać żądanie zgodności z zasadami.

Konfiguracja zasady obejmuje informacje potrzebne Edge do dekodowania i oceny tokena JWT, na przykład miejsce znalezienia tokena JWT (w zmiennej przepływu określonej w elemencie Source), wymagany algorytm podpisywania, miejsce przechowywania tajnego klucza (przechowywanego w zmiennej przepływu brzegowego, która na przykład mogła zostać pobrana z Edge KVM), a także zestaw wymaganych deklaracji i ich wartości.

<VerifyJWT name="JWT-Verify-HS256">
    <DisplayName>JWT Verify HS256</DisplayName>
    <Algorithm>HS256</Algorithm>
    <Source>request.formparam.jwt</Source>
    <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    <SecretKey encoding="base64">
        <Value ref="private.secretkey"/>
    </SecretKey>
    <Subject>monty-pythons-flying-circus</Subject>
    <Issuer>urn://apigee-edge-JWT-policy-test</Issuer>
    <Audience>fans</Audience>
    <AdditionalClaims>
        <Claim name="show">And now for something completely different.</Claim>
    </AdditionalClaims>
</VerifyJWT>

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.

Zweryfikuj token JWT podpisany za pomocą algorytmu RS256

Ta przykładowa zasada weryfikuje token JWT podpisany za pomocą algorytmu RS256. Aby przeprowadzić weryfikację, musisz podać klucz publiczny. Token JWT jest przekazywany w żądaniu serwera proxy za pomocą parametru formularza o nazwie jwt. Klucz publiczny jest zawarty w zmiennej o nazwie public.publickey. Obejrzyj film powyżej, aby zobaczyć pełny przykład, w tym, jak przesłać żądanie zgodności z zasadami.

Szczegółowe informacje o wymaganiach i opcjach dotyczących poszczególnych elementów w tej przykładowej zasadzie znajdziesz w dokumentacji elementów.

<VerifyJWT name="JWT-Verify-RS256">
    <Algorithm>RS256</Algorithm>
    <Source>request.formparam.jwt</Source>
    <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    <PublicKey>
        <Value ref="public.publickey"/>
    </PublicKey>
    <Subject>apigee-seattle-hatrack-montage</Subject>
    <Issuer>urn://apigee-edge-JWT-policy-test</Issuer>
    <Audience>urn://c60511c0-12a2-473c-80fd-42528eb65a6a</Audience>
    <AdditionalClaims>
        <Claim name="show">And now for something completely different.</Claim>    
    </AdditionalClaims>
</VerifyJWT>

W przypadku powyższej konfiguracji token JWT z tym nagłówkiem...

{
  "typ" : "JWT", 
  "alg" : "RS256"
}

A te ładunek...

{ 
  "sub" : "apigee-seattle-hatrack-montage",
  "iss" : "urn://apigee-edge-JWT-policy-test",
  "aud" : "urn://c60511c0-12a2-473c-80fd-42528eb65a6a",
  "show": "And now for something completely different."
}

... zostanie uznany za prawidłowy, jeśli można zweryfikować podpis za pomocą podanego klucza publicznego.

Token JWT z tym samym nagłówkiem, ale z tym ładunkiem...

{ 
  "sub" : "monty-pythons-flying-circus",
  "iss" : "urn://apigee-edge-JWT-policy-test",
  "aud" : "urn://c60511c0-12a2-473c-80fd-42528eb65a6a",
  "show": "And now for something completely different."
}

... zostanie uznany za nieprawidłowy, nawet jeśli można zweryfikować podpis, ponieważ deklaracja „sub” zawarta w tokenie JWT nie odpowiada wymaganej wartości elementu „Subject” określonej w konfiguracji zasady.

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.

Wyznaczanie kluczowych elementów

Elementy, których używasz do określenia klucza do weryfikacji tokena JWT, zależą od wybranego algorytmu, jak pokazano w tej tabeli:

Algorytm Kluczowe elementy
HS*
<SecretKey encoding="base16|hex|base64|base64url">
  <Value ref="private.secretkey"/>
</SecretKey>
RS*, ES*, PS*
<PublicKey>
  <Value ref="rsa_public_key_or_value"/>
</PublicKey>

lub

<PublicKey>
  <Certificate ref="signed_cert_val_ref"/>
</PublicKey>

lub

<PublicKey>
  <JWKS ref="jwks_val_or_ref"/>
</PublicKey>
* Więcej informacji o wymaganiach dotyczących klucza znajdziesz w artykule Informacje o algorytmach szyfrowania podpisów.

Odwołanie do elementu

Dokumentacja zasad zawiera opis elementów i atrybutów zasady weryfikacji JWT.

Uwaga: konfiguracja będzie nieco się różnić w zależności od użytego algorytmu szyfrowania. W sekcji Przykłady znajdziesz przykłady konfiguracji dla konkretnych przypadków użycia.

Atrybuty stosowane do elementu najwyższego poziomu

<VerifyJWT 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

<Algorithm>

<Algorithm>HS256</Algorithm>

Określa algorytm szyfrowania do podpisywania tokena. Algorytmy RS*/PS*/ES* stosują parę kluczy publiczny/tajny, a algorytmy HS* korzystają z wspólnego obiektu tajnego. Zobacz też Informacje o algorytmach szyfrowania podpisów.

Możesz podać wiele wartości, rozdzielając je przecinkami. Na przykład „HS256, HS512” lub „RS256, PS256”. Nie można jednak łączyć algorytmów HS* z żadnymi innymi algorytmami ani algorytmami ES*, ponieważ wymagają one określonego typu klucza. Możesz połączyć algorytmy RS* i PS*.

Domyślnie Nie dotyczy
Obecność Wymagane
Typ Ciąg wartości oddzielonych przecinkami
Prawidłowe wartości HS256, HS384, HS512, RS256, RS384, RS512, ES256, ES384, ES512, PS256, PS384, PS512

<Audience>

<Audience>audience-here</Audience>

or:

<Audience ref='variable-name-here'/>

Zasada weryfikuje, czy deklaracja odbiorców w JWT odpowiada wartości określonej w konfiguracji. W przypadku braku dopasowań zasada zgłasza błąd. Ta deklaracja określa odbiorców, dla których przeznaczony jest token JWT. Jest to jedno z zarejestrowanych roszczeń wymienionych w dokumencie RFC7519.

Domyślnie Nie dotyczy
Obecność Opcjonalnie
Typ Ciąg znaków
Prawidłowe wartości Zmienna lub ciąg tekstowy przepływu określający odbiorców.

<Dodatkowe roszczenia/roszczenie>

<AdditionalClaims>
    <Claim name='claim1'>explicit-value-of-claim-here</Claim>
    <Claim name='claim2' ref='variable-name-here'/>
    <Claim name='claim3' ref='variable-name-here' type='boolean'/>
 </AdditionalClaims>

or:

<AdditionalClaims ref='claim_payload'/>

Sprawdza, czy ładunek JWT zawiera określone dodatkowe deklaracje i czy wartości zgłoszonych deklaracji są zgodne.

Dodatkowa deklaracja używa nazwy innej niż standardowa, zarejestrowana nazwa deklaracji JWT. Wartością dodatkowego zgłoszenia może być ciąg, liczba, wartość logiczna, mapa lub tablica. Mapa to po prostu zestaw par nazwa/wartość. Wartość deklaracji dowolnego z tych typów można określić bezpośrednio w konfiguracji zasad lub pośrednio przez odniesienie do zmiennej przepływu.

Domyślnie Nie dotyczy
Obecność Opcjonalnie
Typ Ciąg znaków, liczba, wartość logiczna lub mapa
Tablica Ustaw na true (prawda), aby wskazać, czy wartość jest tablicą typów. Wartość domyślna: false
Prawidłowe wartości Dowolna wartość, której chcesz użyć w dodatkowym roszczeniu.

Element <Claim> przyjmuje te atrybuty:

  • name – (wymagany) nazwa roszczenia.
  • ref – (opcjonalny) nazwa zmiennej przepływu. Jeśli ta zmienna jest obecna, zasada będzie używać jej jako wartości deklaracji. Jeśli określony jest zarówno atrybut ref, jak i jawna wartość deklaracji, domyślna wartość jest jawna. Jest ona używana, gdy wskazywana zmienna przepływu jest nierozstrzygnięta.
  • type – (opcjonalny) 1 z: ciąg znaków (domyślny), liczba, wartość logiczna lub mapa.
  • tablica – (opcjonalnie) ustaw na true, by wskazać, czy wartość jest tablicą typów. Wartość domyślna: false.

Jeśli dodasz element <Claim>, nazwy deklaracji będą ustawiane statycznie podczas konfigurowania zasady. Możesz też przekazać obiekt JSON, aby określić nazwy deklaracji. Obiekt JSON jest przekazywany jako zmienna, więc nazwy deklaracji są określane w czasie działania.

Na przykład:

<AdditionalClaims ref='json_claims'/>

Zmienna json_claims zawiera obiekt JSON w formacie:

{
  "sub" : "person@example.com",
  "iss" : "urn://secure-issuer@example.com",
  "non-registered-claim" : {
    "This-is-a-thing" : 817,
    "https://example.com/foobar" : { "p": 42, "q": false }
  }
}

<Dodatkowe nagłówki/roszczenie>

<AdditionalHeaders>
    <Claim name='claim1'>explicit-value-of-claim-here</Claim>
    <Claim name='claim2' ref='variable-name-here'/>
    <Claim name='claim3' ref='variable-name-here' type='boolean'/>
    <Claim name='claim4' ref='variable-name' type='string' array='true'/>
 </AdditionalHeaders>

Sprawdza, czy nagłówek JWT zawiera określone pary nazw i wartości dodatkowych deklaracji oraz czy wartości zgłoszonych deklaracji są zgodne.

Dodatkowa deklaracja używa nazwy, która nie jest standardową, zarejestrowaną nazwą deklaracji JWT. Wartością dodatkowego zgłoszenia może być ciąg, liczba, wartość logiczna, mapa lub tablica. Mapa to po prostu zestaw par nazwa/wartość. Wartość deklaracji dowolnego z tych typów można określić bezpośrednio w konfiguracji zasad lub pośrednio przez odniesienie do zmiennej przepływu.

Domyślnie Nie dotyczy
Obecność Opcjonalnie
Typ

Ciąg znaków (domyślnie), liczba, wartość logiczna lub mapa.

Jeśli nie określono typu, typ przyjmuje domyślnie wartość String (ciąg znaków).

Tablica Ustaw na true (prawda), aby wskazać, czy wartość jest tablicą typów. Wartość domyślna: false
Prawidłowe wartości Dowolna wartość, której chcesz użyć w dodatkowym roszczeniu.

Element <Claim> przyjmuje te atrybuty:

  • name – (wymagany) nazwa roszczenia.
  • ref – (opcjonalny) nazwa zmiennej przepływu. Jeśli ta zmienna jest obecna, zasada będzie używać jej jako wartości deklaracji. Jeśli określony jest zarówno atrybut ref, jak i jawna wartość deklaracji, domyślna wartość jest jawna. Jest ona używana, gdy wskazywana zmienna przepływu jest nierozstrzygnięta.
  • type – (opcjonalny) 1 z: ciąg znaków (domyślny), liczba, wartość logiczna lub mapa.
  • tablica – (opcjonalnie) ustaw na true, by wskazać, czy wartość jest tablicą typów. Wartość domyślna: false.

<CustomClaims>

Uwaga: obecnie element CustomClaims jest wstawiony podczas dodawania w interfejsie nowej zasady WygenerujJWT. Ten element nie działa i jest ignorowany. Prawidłowy element, którego możesz użyć zamiast niego, to <AdditionalClaims>. Interfejs zostanie zaktualizowany tak, by później wstawić odpowiednie elementy.

<Identyfikator>

<Id>explicit-jti-value-here</Id>
 -or-
<Id ref='variable-name-here'/>
 -or-
<Id/>

Sprawdza, czy token JWT zawiera określone żądanie jti. Gdy zarówno wartość tekstowa, jak i atrybut ref są puste, zasada wygeneruje jti zawierający losowy identyfikator UUID. Deklaracja identyfikatora JWT (jti) jest unikalnym identyfikatorem tokena JWT. Więcej informacji na temat jti znajdziesz w dokumencie RFC7519.

Domyślnie Nie dotyczy
Obecność Opcjonalnie
Typ Ciąg znaków lub odwołanie.
Prawidłowe wartości Może to być ciąg znaków lub nazwa zmiennej przepływu zawierającej identyfikator.

<IgnoreCriticalHeaders>

<IgnoreCriticalHeaders>true|false</IgnoreCriticalHeaders>

Ustaw wartość „false”, jeśli chcesz, by zasada zwracała błąd, gdy którykolwiek nagłówek podany w nagłówku crit tokena JWT nie jest wymieniony w elemencie <KnownHeaders>. Ustaw wartość true, aby spowodować, że zasada weryfikacji JWT ignoruje nagłówek crit.

Jednym z powodów, dla których ten element należy ustawić na wartość Prawda, jest sytuacja, w której znajdujesz się w środowisku testowym i nie możesz jeszcze spowodować błędu związanego z brakującym nagłówkiem.

Domyślnie false
Obecność Opcjonalnie
Typ Wartość logiczna
Prawidłowe wartości prawda lub fałsz

<IgnoreIssuedAt>

<IgnoreIssuedAt>true|false</IgnoreIssuedAt>

Ustaw wartość „false” (fałsz), jeśli chcesz, by zasada zgłaszała błąd, gdy token JWT zawiera deklarację iat (wydana o) wskazującą godzinę w przyszłości. Ustaw wartość „true” (prawda), aby zasada ignorowała atrybut iat podczas weryfikacji.

Domyślnie false
Obecność Opcjonalnie
Typ Wartość logiczna
Prawidłowe wartości prawda lub fałsz

<IgnoreUnresolvedVariables>

<IgnoreUnresolvedVariables>true|false</IgnoreUnresolvedVariables>

Ustaw wartość „false”, jeśli chcesz, by zasada zgłaszała błąd, gdy jakakolwiek przywołana zmienna określona w zasadzie jest nierozwiązana. Ustaw wartość „true”, aby traktować każdą nierozwiązaną zmienną jako pusty ciąg znaków (null).

Domyślnie false
Obecność Opcjonalnie
Typ Wartość logiczna
Prawidłowe wartości prawda lub fałsz

<Issuer>

<Issuer ref='variable-name-here'/>
<Issuer>issuer-string-here</Issuer>

Zasada weryfikuje, czy wydawca w tokenie JWT pasuje do ciągu określonego w elemencie konfiguracji. Deklaracja, która identyfikuje wydawcę tokena JWT. Jest to jeden z zarejestrowanych zestawów roszczeń wymienionych w dokumencie RFC7519.

Domyślnie Nie dotyczy
Obecność Opcjonalnie
Typ Ciąg znaków lub odwołanie
Prawidłowe wartości Dowolny

<KnownHeaders>

<KnownHeaders>a,b,c</KnownHeaders>

or:

<KnownHeaders ref=’variable_containing_headers’/>

Zasada Wygeneruj JWT używa elementu <CriticalHeaders> do wypełniania nagłówka crit w tokenie JWT. Na przykład:

{
  “typ: “...”,
  “alg” : “...”,
  “crit” : [ “a”, “b”, “c” ],
}

Zasada weryfikacji JWT sprawdza nagłówek crit w tokenie JWT, jeśli taki istnieje, i sprawdza, czy element <KnownHeaders> zawiera też dany nagłówek w przypadku każdego wymienionego nagłówka. Element <KnownHeaders> może zawierać nadzbiór elementów wymienionych w polu crit. W elemencie <KnownHeaders> muszą być tylko wszystkie nagłówki wymienione w parametrze crit. Każdy nagłówek znaleziony przez zasadę w crit, który nie jest wymieniony w <KnownHeaders>, powoduje błędy zasady weryfikacji JWT.

Opcjonalnie możesz skonfigurować zasadę weryfikacji JWT tak, aby ignorowała nagłówek crit, ustawiając element <IgnoreCriticalHeaders> na true.

Domyślnie Nie dotyczy
Obecność Opcjonalnie
Typ Tablica ciągów tekstowych rozdzielonych przecinkami
Prawidłowe wartości Tablica lub nazwa zmiennej zawierającej tablicę.

<Klucz publiczny/certyfikat>

<PublicKey>
   <Certificate ref="signed_public.cert"/>
</PublicKey>
-or-
<PublicKey>
    <Certificate>
    -----BEGIN CERTIFICATE-----
    cert data
    -----END CERTIFICATE-----
    </Certificate>
</PublicKey>

Określa podpisany certyfikat używany do weryfikacji podpisu w tokenie JWT. Użyj atrybutu ref, aby przekazać podpisany certyfikat w zmiennej przepływu, lub podaj certyfikat bezpośrednio zakodowany w formacie PEM. Używaj tylko w przypadku algorytmu RS256/RS384/RS512, PS256/PS384/PS512 lub ES256/ES384/ES512.

Domyślnie Nie dotyczy
Obecność Aby zweryfikować token JWT podpisany za pomocą algorytmu RSA, musisz użyć elementu Certificate, JWKS lub Value.
Typ Ciąg znaków
Prawidłowe wartości Zmienna lub ciąg tekstowy przepływu.

<PublicKey/JWKS>

<!-- Specify the JWKS. -->
<PublicKey>
   <JWKS>jwks-value-here</JWKS>
</PublicKey>

or:

<!-- Specify a variable containing the JWKS. -->
<PublicKey>
   <JWKS ref="public.jwks"/>
</PublicKey>

or:

<!-- Specify a public URL that returns the JWKS.
The URL is static, meaning you cannot set it using a variable. -->
<PublicKey>
   <JWKS uri="jwks-url"/>
</PublicKey>

Określa wartość w formacie JWKS (RFC 7517) zawierającą zestaw kluczy publicznych. Użyj tylko wtedy, gdy algorytm to RS256/RS384/RS512, PS256/PS384/PS512 lub ES256/ES384/ES512.

Jeśli przychodzący token JWT nosi identyfikator klucza, który znajduje się w zestawie JWKS, zasada użyje odpowiedniego klucza publicznego do zweryfikowania podpisu JWT. Więcej informacji o tej funkcji znajdziesz w artykule o weryfikowaniu tokena JWT za pomocą zestawu kluczy Web JSON (JWKS).

Jeśli pobierasz wartość z publicznego adresu URL, Edge przechowuje JWKS w pamięci podręcznej przez 300 sekund. Po wygaśnięciu pamięci podręcznej Edge ponownie pobiera JWKS.

Domyślnie Nie dotyczy
Obecność Aby zweryfikować token JWT za pomocą algorytmu RSA, musisz użyć elementu Certificate, JWKS lub Value.
Typ Ciąg znaków
Prawidłowe wartości Zmienna przepływu, wartość ciągu znaków lub adres URL.

<PublicKey/Value>

<PublicKey>
   <Value ref="public.publickeyorcert"/>
</PublicKey>
-or-
<PublicKey>
    <Value>
    -----BEGIN PUBLIC KEY-----
    MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw2kPrRzcufvUNHvTH/WW
    Q0UrCw5c0+Y707KX3PpXkZGbtTT4nvU1jC0d1lHV8MfUyRXmpmnNxJHAC2F73IyN
    C5TBtXMORc+us7A2cTtC4gZV256bT4h3sIEMsDl0Joz9K9MPzVPFxa1i0RgNt06n
    Xn/Bs2UbbLlKP5Q1HPxewUDEh0gVMqz9wdIGwH1pPxKvd3NltYGfPsUQovlof3l2
    ALvO7i5Yrm96kknfFEWf1EjmCCKvz2vjVbBb6mp1ZpYfc9MOTZVpQcXSbzb/BWUo
    ZmkDb/DRW5onclGzxQITBFP3S6JXd4LNESJcTp705ec1cQ9Wp2Kl+nKrKyv1E5Xx
    DQIDAQAB
    -----END PUBLIC KEY-----
    </Value>
</PublicKey>

Określa klucz publiczny lub certyfikat publiczny używany do weryfikowania podpisu w tokenie JWT. Użyj atrybutu ref, aby przekazać klucz/certyfikat w zmiennej przepływu, lub podaj klucz bezpośrednio zakodowany w formacie PEM. Użyj tylko wtedy, gdy algorytm to RS256/RS384/RS512, PS256/PS384/PS512 lub ES256/ES384/ES512.

Domyślnie Nie dotyczy
Obecność Aby zweryfikować token JWT podpisany za pomocą algorytmu RSA, musisz użyć elementu Certificate, JWKS lub Value.
Typ Ciąg znaków
Prawidłowe wartości Zmienna lub ciąg tekstowy przepływu.

<SecretKey/Value>

<SecretKey encoding="base16|hex|base64|base64url">
  <Value ref="private.your-variable-name"/>
</SecretKey>

Udostępnia tajny klucz używany do weryfikowania lub podpisywania tokenów za pomocą algorytmu HMAC. Używaj tylko wtedy, gdy algorytm ma wartość HS256, HS384, HS512.

Domyślnie Nie dotyczy
Obecność Wymagany w przypadku algorytmów HMAC.
Typ Ciąg znaków
Prawidłowe wartości

Prawidłowe wartości dla encoding to hex, base16, base64 lub base64url. Wartości kodowania hex i base16 są synonimami.

Użyj atrybutu ref, aby przekazać klucz w zmiennej przepływu.

Uwaga: jeśli zmienna przepływu musi mieć prefiks „prywatny”. Przykład: private.mysecret

<Źródło>

<Source>jwt-variable</Source>

Jeśli istnieje, określa zmienną przepływu, w której zasada ma znaleźć token JWT do zweryfikowania.

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.

<Subject>

<Subject>subject-string-here</Subject>

Zasada weryfikuje, czy podmiot w JWT pasuje do ciągu określonego w konfiguracji zasady. Deklaracja wskazuje lub zawiera informację na temat tematu tokena JWT. Jest to jeden ze standardowych zestawów twierdzeń wymienionych w dokumencie RFC7519.

Domyślnie Nie dotyczy
Obecność Opcjonalnie
Typ Ciąg znaków
Prawidłowe wartości Dowolna wartość jednoznacznie identyfikująca podmiot.

<TimeAllowance>

<TimeAllowance>120s</TimeAllowance>

„Okres prolongaty” dla godzin Jeśli na przykład limit czasu jest ustawiony na 60 s, nieważny token JWT będzie traktowany jako prawidłowy przez 60 sekund po potwierdzeniu wygaśnięcia. Czas inny niż wcześniej zostanie oceniony podobnie. Domyślna wartość to 0 sekund (bez okresu prolongaty).

Domyślnie 0 sekund (bez okresu prolongaty)
Obecność Opcjonalnie
Typ Ciąg znaków
Prawidłowe wartości Wartość lub odniesienie do zmiennej przepływu zawierającej wartość. Przedziały czasu można określić w ten sposób:
  • s = s
  • m = minuty
  • h = godziny
  • d = dni

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 Występuje, gdy
steps.jwt.AlgorithmInTokenNotPresentInConfiguration 401 Dzieje się tak, gdy zasada weryfikacji ma wiele algorytmów.
steps.jwt.AlgorithmMismatch 401 Algorytm określony w zasadzie generowania nie był zgodny z algorytmem określonym w zasadzie weryfikacji. Podane algorytmy muszą się zgadzać.
steps.jwt.FailedToDecode 401 Zasadom nie udało się zdekodować tokena JWT. Token JWT jest prawdopodobnie uszkodzony.
steps.jwt.GenerationFailed 401 Nie udało się wygenerować tokena JWT za pomocą zasady.
steps.jwt.InsufficientKeyLength 401 W przypadku klucza krótszego niż 32 bajty dla algorytmu HS256, mniej niż 48 bajtów w przypadku algorytmu HS386 i mniej niż 64 bajty w przypadku algorytmu HS512.
steps.jwt.InvalidClaim 401 Brak zgodności z deklaracją lub zgłoszeniem albo brak zgodności nagłówka lub nagłówka.
steps.jwt.InvalidCurve 401 Krzywa określona przez klucz jest nieprawidłowa dla algorytmu krzywych eliptycznych.
steps.jwt.InvalidJsonFormat 401 W nagłówku lub ładunku znaleziono nieprawidłowy kod JSON.
steps.jwt.InvalidToken 401 Ten błąd występuje, gdy weryfikacja podpisu JWT nie powiedzie się.
steps.jwt.JwtAudienceMismatch 401 Podczas weryfikacji tokena nie udało się potwierdzić odbiorców.
steps.jwt.JwtIssuerMismatch 401 Podczas weryfikacji tokena nie udało się zgłosić deklaracji wydawcy.
steps.jwt.JwtSubjectMismatch 401 Żądanie tematu nie powiodło się podczas weryfikacji tokena.
steps.jwt.KeyIdMissing 401 Zasada weryfikacji używa JWKS jako źródła kluczy publicznych, ale podpisany token JWT nie zawiera w nagłówku właściwości kid.
steps.jwt.KeyParsingFailed 401 Nie udało się przeanalizować klucza publicznego na podstawie podanych informacji o kluczu.
steps.jwt.NoAlgorithmFoundInHeader 401 Występuje, gdy token JWT nie zawiera nagłówka algorytmu.
steps.jwt.NoMatchingPublicKey 401 Zasada weryfikacji używa JWKS jako źródła kluczy publicznych, ale kid w podpisanym tokenie JWT nie jest wymieniony w JWKS.
steps.jwt.SigningFailed 401 W narzędziu Wygeneruj JWT dla klucza mniejszego niż minimalny rozmiar algorytmów HS384 lub HS512
steps.jwt.TokenExpired 401 Zasada próbuje zweryfikować wygasły token.
steps.jwt.TokenNotYetValid 401 Token nie jest jeszcze prawidłowy.
steps.jwt.UnhandledCriticalHeader 401 Nagłówek, który znajduje się w zasadzie weryfikacji JWT w nagłówku crit, nie jest wymieniony w KnownHeaders.
steps.jwt.UnknownException 401 Wystąpił nieznany wyjątek.
steps.jwt.WrongKeyType 401 Podano nieprawidłowy typ klucza. Możesz na przykład podać klucz RSA dla algorytmu krzywych eliptycznych lub klucz krzywej dla algorytmu RSA.

Błędy wdrażania

Te błędy mogą wystąpić podczas wdrażania serwera proxy zawierającego te zasady.

Nazwa błędu Przyczyna Napraw
InvalidNameForAdditionalClaim Wdrożenie nie uda się, jeśli żądanie użyte w elemencie podrzędnym <Claim> elementu <AdditionalClaims> jest jedną z tych zarejestrowanych nazw: kid, iss, sub, aud, iat, exp, nbf lub jti.
InvalidTypeForAdditionalClaim Jeśli żądanie użyte w elemencie podrzędnym <Claim> elementu <AdditionalClaims> nie jest typu string, number, boolean ani map, wdrożenie się nie uda.
MissingNameForAdditionalClaim Jeśli nazwy deklaracji nie podasz w elemencie podrzędnym <Claim> elementu <AdditionalClaims>, wdrożenie się nie uda.
InvalidNameForAdditionalHeader Ten błąd występuje, gdy nazwa roszczenia użytego w elemencie podrzędnym <Claim> elementu <AdditionalClaims> to alg lub typ.
InvalidTypeForAdditionalHeader Jeśli typ deklaracji użyty w elemencie podrzędnym <Claim> elementu <AdditionalClaims> nie jest typu string, number, boolean ani map, wdrożenie się nie uda.
InvalidValueOfArrayAttribute Ten błąd występuje, gdy wartość atrybutu tablicy w elemencie podrzędnym <Claim> elementu <AdditionalClaims> nie jest ustawiona na true lub false.
InvalidValueForElement Jeśli wartość podana w elemencie <Algorithm> nie jest obsługiwaną wartością, wdrożenie się nie uda.
MissingConfigurationElement Ten błąd występuje, jeśli element <PrivateKey> nie jest używany w algorytmach rodziny RSA lub jeśli element <SecretKey> nie jest używany w algorytmach rodziny HS.
InvalidKeyConfiguration Jeśli element podrzędny <Value> nie jest zdefiniowany w elementach <PrivateKey> lub <SecretKey>, wdrożenie się nie uda.
EmptyElementForKeyConfiguration Jeśli atrybut ref elementu podrzędnego <Value> elementów <PrivateKey> lub <SecretKey> jest pusty lub nieokreślony, wdrożenie się nie uda.
InvalidConfigurationForVerify Ten błąd występuje, jeśli element <Id> jest zdefiniowany w elemencie <SecretKey>.
InvalidEmptyElement Ten błąd występuje, jeśli element <Source> zasady weryfikacji JWT jest pusty. Jeśli występuje, należy ją zdefiniować za pomocą nazwy zmiennej przepływu Edge.
InvalidPublicKeyValue Jeśli wartość używana w elemencie podrzędnym <JWKS> elementu <PublicKey> nie używa prawidłowego formatu określonego w RFC 7517, wdrożenie się nie uda.
InvalidConfigurationForActionAndAlgorithm Jeśli element <PrivateKey> jest używany w algorytmach rodziny HS lub element <SecretKey> jest używany w algorytmach rodziny RSA, wdrożenie się nie uda.

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>