Wygeneruj zasadę JWT

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

Co

Generuje podpisany token JWT z konfigurowalnym zestawem deklaracji. Token JWT można następnie zwrócić klientom, przesłać do miejsc docelowych backendu lub użyć w inny sposób. Szczegółowe informacje znajdziesz w omówieniu zasad JWS i JWT.

Wideo

Obejrzyj krótki film, aby dowiedzieć się, jak wygenerować podpisany token JWT.

Przykłady

Generowanie tokena JWT podpisanego za pomocą algorytmu HS256

Ta przykładowa zasada generuje nowy token JWT i podpisuje go za pomocą algorytmu HS256. HS256 wykorzystuje wspólny obiekt tajny do podpisywania i weryfikacji podpisu.

Po uruchomieniu tego działania zasady Edge zakoduje nagłówek i ładunek JWT, a następnie podpisuje token JWT cyfrowo. Obejrzyj film powyżej, aby zobaczyć pełny przykład, w tym, jak przesłać żądanie zgodności z zasadami.

Ta konfiguracja zasad utworzy token JWT z zestawem standardowych deklaracji zgodnie ze specyfikacją JWT, w tym wygaśnięciem po upływie godziny oraz dodatkowym zgłoszeniem. Możesz dodać dowolną liczbę dodatkowych roszczeń. Szczegółowe informacje o wymaganiach i opcjach dotyczących poszczególnych elementów w tych przykładowych zasadach znajdziesz w dokumentacji elementów.

<GenerateJWT name="JWT-Generate-HS256">
    <DisplayName>JWT Generate HS256</DisplayName>
    <Algorithm>HS256</Algorithm>
    <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    <SecretKey>
        <Value ref="private.secretkey"/>
        <Id>1918290</Id>
    </SecretKey>
    <ExpiresIn>1h</ExpiresIn>
    <Subject>monty-pythons-flying-circus</Subject>
    <Issuer>urn://apigee-edge-JWT-policy-test</Issuer>
    <Audience>fans</Audience>
    <Id/>
    <AdditionalClaims>
        <Claim name="show">And now for something completely different.</Claim>
    </AdditionalClaims>
    <OutputVariable>jwt-variable</OutputVariable>
</GenerateJWT>

Powstały token JWT będzie miał ten nagłówek...

{
  "typ" : "JWT", 
  "alg" : "HS256",
  "kid" : "1918290"
}

...i będzie zawierać ładunek z treścią podobną do tej:

{ 
  "sub" : "monty-pythons-flying-circus",
  "iss" : "urn://apigee-edge-JWT-policy-test",
  "aud" : "show",
  "iat" : 1506553019,
  "exp" : 1506556619,
  "jti" : "BD1FF263-3D25-4593-A685-5EC1326E1F37",
  "show": "And now for something completely different."
}

Wartości roszczeń iat, exp i jti będą różne.

Generowanie tokena JWT podpisanym algorytmem RS256

Ta przykładowa zasada generuje nowy token JWT i podpisuje go za pomocą algorytmu RS256. Generowanie podpisu RS256 odbywa się przy użyciu klucza prywatnego RSA, który należy podać w postaci zakodowanej w formacie PEM. Obejrzyj film powyżej, aby zobaczyć pełny przykład, w tym, jak przesłać żądanie zgodności z zasadami.

Po uruchomieniu tego działania zasady Edge zakoduje i cyfrowo podpisze token JWT wraz z deklaracjami. Informacje o częściach tokena JWT oraz sposobach ich szyfrowania i podpisywania znajdziesz w dokumencie RFC7519.

<GenerateJWT name="JWT-Generate-RS256">
    <Algorithm>RS256</Algorithm>
    <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    <PrivateKey>
        <Value ref="private.privatekey"/>
        <Password ref="private.privatekey-password"/>
        <Id ref="private.privatekey-id"/>
    </PrivateKey>
    <Subject>apigee-seattle-hatrack-montage</Subject>
    <Issuer>urn://apigee-edge-JWT-policy-test</Issuer>
    <Audience>urn://c60511c0-12a2-473c-80fd-42528eb65a6a</Audience>
    <ExpiresIn>60m</ExpiresIn>
    <Id/>
    <AdditionalClaims>
        <Claim name="show">And now for something completely different.</Claim>
    </AdditionalClaims>
    <OutputVariable>jwt-variable</OutputVariable>
</GenerateJWT>

Wyznaczanie kluczowych elementów

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

Algorytm Kluczowe elementy
HS{256/384/512}*
<SecretKey>
  <Value ref="private.secretkey"/>
  <Id>1918290</Id>
</SecretKey>
RS/PS/ES{256/384/512}*
<PrivateKey>
  <Value ref="private.privatekey"/>
  <Password ref="private.privatekey-password"/>
  <Id ref="private.privatekey-id"/>
</PrivateKey>

Elementy <Password> i <Id> są opcjonalne.

* Więcej informacji o wymaganiach dotyczących klucza znajdziesz w artykule Informacje o algorytmach szyfrowania podpisów.

Dokumentacja elementu w przypadku generowania tokena JWT

Dokumentacja zasad zawiera opis elementów i atrybutów zasady Wygeneruj token 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

<GenerateJWT 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>algorithm-here</Algorithm>

Określa algorytm szyfrowania do podpisywania tokena.

Domyślnie Nie dotyczy
Obecność Wymagane
Typ Ciąg znaków
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_containing_audience'/>

Zasada generuje token JWT z deklaracjami aud ustawionymi na określoną wartość. 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 Tablica (lista wartości rozdzielonych przecinkami)
Prawidłowe wartości Wszystko, co identyfikuje 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'/>

Pozwala określić dodatkowe pary nazwy i wartości deklaracji w ładunku JWT. Możesz określić deklarację wyraźnie jako ciąg znaków, liczbę, wartość logiczną, mapę lub tablica. Mapa to po prostu zestaw par nazwa/wartość.

Domyślnie Nie dotyczy
Obecność Opcjonalnie
Prawidłowe wartości Dowolna wartość, której chcesz użyć w dodatkowym roszczeniu. Możesz określić deklarację wyraźnie jako ciąg znaków, liczbę, wartość logiczną, mapę lub tablica.

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 w wygenerowanym tokenie JWT 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 }
  }
}

Wygenerowany token JWT zawiera wszystkie deklaracje w obiekcie JSON.

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

Umieszcza dodatkowe pary nazwy i wartości deklaracji w nagłówku tokena JWT.

Domyślnie Nie dotyczy
Obecność Opcjonalnie
Prawidłowe wartości Dowolna wartość, której chcesz użyć w dodatkowym roszczeniu. Możesz określić deklarację wyraźnie jako ciąg znaków, liczbę, wartość logiczną, mapę lub tablica.

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.

<CriticalHeaders>

<CriticalHeaders>a,b,c</CriticalHeaders>

or:

<CriticalHeaders ref=’variable_containing_headers’/>

Dodaje krytyczny nagłówek crit do nagłówka JWT. Nagłówek crit to tablica nazw nagłówków, które muszą być znane i rozpoznawane przez odbiornik JWT. Na przykład:

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

W czasie działania zasada weryfikacji JWT sprawdza nagłówek crit. W przypadku każdego elementu wymienionego w nagłówku crit sprawdza, czy element <KnownHeaders> zasady weryfikacji JWT też zawiera ten nagłówek. Każdy nagłówek, który znajduje się w zasadzie weryfikacji JWT w crit, a nie jest wymieniony w <KnownHeaders>, powoduje niepowodzenie zasady weryfikacji JWT.

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ę.

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

<ExpiresIn>

<ExpiresIn>time-value-here</ExpiresIn>

Określa czas życia tokena JWT w milisekundach, sekundach, minutach, godzinach lub dniach.

Domyślnie N/A
Obecność Opcjonalnie
Typ Liczba całkowita
Prawidłowe wartości

Wartość lub odniesienie do zmiennej przepływu zawierającej wartość. Jednostki czasu można określić w ten sposób:

  • ms = milisekundy (domyślnie)
  • s = s
  • m = minuty
  • h = godziny
  • d = dni

Na przykład ExpiresIn=10d jest odpowiednikiem ExpiresIn równym 864 000s.

<Identyfikator>

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

Generuje token JWT z konkretnym żądaniem 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.

<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 Fałsz
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 generuje token JWT zawierający deklaracja o nazwie iss,która ma ustawioną wartość. 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

<NotBefore>

<!-- Specify an absolute time. -->
<NotBefore>2017-08-14T11:00:21-07:00</NotBefore>
 -or-
<!-- Specify a time relative to when the token is generated. -->
<NotBefore>6h</NotBefore>

Określa czas, kiedy token staje się ważny. Token jest nieprawidłowy do określonego momentu. Możesz podać bezwzględną wartość czasu lub czas w stosunku do czasu wygenerowania tokena.

Domyślnie Nie dotyczy
Obecność Opcjonalnie
Typ Ciąg znaków
Prawidłowe wartości Szczegółowe informacje znajdziesz poniżej.

Prawidłowe wartości czasu elementu NotBefore w przypadku bezwzględnych wartości czasu

Nazwa Format Przykład
sortowalna yyyy-MM-dd'T'HH:mm:ss.SSSZ 2017-08-14T11:00:21.269-0700
RFC 1123 EEE, dd MMM yyyy HH:mm:ss zzz Pon, 14 sie 2017 11:00:21 PDT
RFC 850 EEEE, dd-MMM-yy HH:mm:ss zzz Poniedziałek, 14–17 sierpnia 11:00:21 PDT
ANCI-C EEE MMM d HH:mm:ss yyyy Pon 14 sie 11:00:21 2017

W przypadku względnych wartości czasu podaj liczbę całkowitą i okres, na przykład:

  • 10 s
  • 60 min
  • 12 godzin

<OutputVariable>

<OutputVariable>jwt-variable</OutputVariable>

Określa, gdzie umieścić token JWT wygenerowany przez tę zasadę. Domyślnie jest on umieszczony w zmiennej przepływu jwt.POLICYNAME.generated_jwt.

Domyślnie jwt.POLICYNAME.generated_jwt
Obecność Opcjonalnie
Typ Ciąg znaków (nazwa zmiennej przepływu)

<PrivateKey/Id>

<PrivateKey>
  <Id ref="flow-variable-name-here"/>
</PrivateKey>

or

<PrivateKey>
  <Id>your-id-value-here</Id>
</PrivateKey>

Określa identyfikator klucza (kid), który ma zostać uwzględniony w nagłówku JWT. Używaj tylko wtedy, gdy algorytmem jest RS256/RS384/RS512, PS256/PS384/PS512 lub ES256/ES384/ES512.

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

<PrivateKey/Password>

<PrivateKey>
  <Password ref="private.privatekey-password"/>
</PrivateKey>

W razie potrzeby podaj hasło, którego zasada ma używać do odszyfrowywania klucza prywatnego. Użyj atrybutu ref, aby przekazać klucz w zmiennej przepływu. Używaj tylko wtedy, gdy algorytmem jest RS256/RS384/RS512, PS256/PS384/PS512 lub ES256/ES384/ES512.

Domyślnie Nie dotyczy
Obecność Opcjonalnie
Typ Ciąg znaków
Prawidłowe wartości Odniesienie do zmiennej przepływu.

Uwaga: musisz podać zmienną przepływu. Edge odrzuci jako nieprawidłową konfigurację zasad, w której hasło jest podane w formie tekstu jawnego. Zmienna przepływu musi mieć prefiks „private”. Przykład: private.mypassword

<PrivateKey/Value>

<PrivateKey>
  <Value ref="private.variable-name-here"/>
</PrivateKey>

Określa klucz prywatny zakodowany w formacie PEM używany do podpisywania tokena JWT. Użyj atrybutu ref, aby przekazać klucz w zmiennej przepływu. Użyj tylko wtedy, gdy algorytm to RS256/RS384/RS512, PS256/PS384/PS512 lub ES256/ES384/ES512.

Domyślnie Nie dotyczy
Obecność Wymagane do wygenerowania tokena JWT za pomocą algorytmu RS256.
Typ Ciąg znaków
Prawidłowe wartości Zmienna przepływu zawierająca ciąg znaków reprezentujący wartość klucza prywatnego RSA zakodowaną w formacie PEM.

Uwaga: zmienna przepływu musi mieć prefiks „private”. Przykład: private.mykey

<SecretKey/Id>

<SecretKey>
  <Id ref="flow-variable-name-here"/>
</SecretKey>

or

<SecretKey>
  <Id>your-id-value-here</Id>
</SecretKey>

Określa identyfikator klucza (kid), który ma zostać uwzględniony w nagłówku JWT tokena JWT podpisanym algorytmem HMAC. Używaj tylko wtedy, gdy algorytm to HS256/HS384/HS512.

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

<SecretKey/Value>

<SecretKey>
  <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 typ HS256/HS384/HS512. Użyj atrybutu ref, aby przekazać klucz w zmiennej przepływu.

W przypadku algorytmów HS256/HS384/HS512 Edge wymusza minimalną siłę klucza. Minimalna długość klucza w przypadku HS256 to 32 bajty, w przypadku HS384 – 48 bajtów, a w przypadku HS512 – 64 bajty. Użycie klucza o niższej sile powoduje błąd środowiska wykonawczego.

Domyślnie Nie dotyczy
Obecność Wymagany w przypadku algorytmów HMAC.
Typ Ciąg znaków
Prawidłowe wartości Zmienna przepływu odnosząca się do ciągu znaków

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

<Subject>

<Subject>subject-string-here</Subject>
lub
<Subject ref="flow_variable" />

Na przykład:

<Subject ref="apigee.developer.email"/>

Zasada generuje token JWT zawierający deklarację sub z określoną wartością.Ta deklaracja identyfikuje temat JWT lub zawiera instrukcję na jego temat. 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 lub zmienną przepływu odnoszącą się do wartości.

Zmienne przepływu

Zasada tworzenia tokena JWT nie ustawia zmiennych przepływu.

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.
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.
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.
InvalidVariableNameForSecret Ten błąd występuje, jeśli nazwa zmiennej przepływu podana w atrybucie ref elementu podrzędnego <Value> elementów <PrivateKey> lub <SecretKey> nie zawiera prywatnego prefiksu (private.).
InvalidSecretInConfig Ten błąd występuje, jeśli element podrzędny <Value> elementów <PrivateKey> lub <SecretKey> nie zawiera prywatnego prefiksu (private.).
InvalidTimeFormat Jeśli wartość podana w elemencie <NotBefore> nie ma obsługiwanego formatu, 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>