Przeglądasz dokumentację Apigee Edge.
Przejdź do
Dokumentacja Apigee X. informacje.
Co
Generuje podpisany JWS z konfigurowalnym zestawem deklaracji. Kod JWS może następnie zostać zwrócony do przesyłanych do celów backendu lub w inny sposób. Szczegółowe informacje znajdziesz w omówieniu zasad JWS i JWT.
Informacje o częściach kodu JWS oraz sposobie ich szyfrowania i podpisywania znajdziesz tutaj: RFC7515
Wideo
Obejrzyj krótki film, aby dowiedzieć się, jak wygenerować podpisany token JWT. W tym filmie związane z generowaniem tokena JWT, wiele koncepcji jest takich samych w przypadku JWS.
Przykłady
- Wygeneruj załączony plik JWS podpisany przy użyciu Algorytm HS256
- Wygeneruj odłączony klucz JWS podpisany za pomocą Algorytm RS256
Wygeneruj załączony plik JWS podpisany przy użyciu kodu HS256 algorytm
Ta przykładowa zasada generuje dołączony plik JWS i podpisuje go za pomocą algorytmu HS256. Zasady HS256 na udostępnionym obiekcie tajnym zarówno do podpisywania, jak i weryfikacji podpisu.
Załączony plik JWS zawiera zakodowany nagłówek, ładunek i podpis:
header.payload.signature
Aby wygenerować odłączone treści, ustaw <DetachContent>
na wartość true (prawda).
Więcej informacji znajdziesz w sekcji o częściach kodu JWS/JWT
strukturę i format JWS.
Użyj elementu <Payload>
, aby określić nieprzetworzony, niezakodowany ładunek JWS.
W tym przykładzie zmienna zawiera ładunek. Po wywołaniu tego działania związanego z zasadami
Edge koduje nagłówek i ładunek JWS, a następnie dodaje zakodowany podpis do cyfrowego podpisywania JWS.
Poniższa konfiguracja zasady tworzy klucz JWS z ładunku zawartego w zmiennej
private.payload
<GenerateJWS name="JWS-Generate-HS256"> <DisplayName>JWS Generate HS256</DisplayName> <Algorithm>HS256</Algorithm> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <SecretKey> <Value ref="private.secretkey"/> <Id>1918290</Id> </SecretKey> <Payload ref="private.payload" /> <OutputVariable>jws-variable</OutputVariable> </GenerateJWS>
Wygeneruj odłączony klucz JWS podpisany przy użyciu protokołu RS256 algorytm
Ta przykładowa zasada generuje odłączony plik JWS i podpisuje go algorytmem RS256. Generowanie Podpis RS256 opiera się na kluczu prywatnym RSA, który należy podać w postaci zakodowanej w formacie PEM.
Odłączona wersja JWS pomija ładunek w JWS:
header..signature
Użyj elementu <Payload>
, aby określić nieprzetworzony, niezakodowany ładunek JWS.
Po aktywowaniu tej zasady Edge koduje nagłówek i ładunek JWS,
a następnie używa ich do wygenerowania zakodowanego podpisu. Wygenerowany JWS jednak pomija ładunek.
Od Ciebie zależy przekazanie ładunku do zasady VerifyJWS za pomocą metody
Element <DetachedContent>
zasady VerifyJWS.
<GenerateJWS name="JWS-Generate-RS256"> <DisplayName>JWS Generate RS256</DisplayName> <Algorithm>RS256</Algorithm> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <PrivateKey> <Value ref="private.privatekey"/> <Password ref="private.privatekey-password"/> <Id ref="private.privatekey-id"/> </PrivateKey> <Payload ref="private.payload" /> <DetachContent>true</DetachContent> <OutputVariable>jws-variable</OutputVariable> </GenerateJWS>
Wyznaczanie kluczowych elementów
Elementy używane do określania klucza używanego do generowania JWS zależą od wybranego algorytmu: zgodnie z poniższą tabelą:
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 |
|
* Więcej informacji o najważniejszych wymaganiach znajdziesz w artykule Informacje o algorytmach szyfrowania podpisu |
Dokumentacja elementu dla funkcji generowania kodu JWS
Opis zasad zawiera opis elementów i atrybutów zasady Generate JWS (Wygeneruj kod JWS).
Uwaga: konfiguracja może się nieco różnić w zależności od szyfrowania stosowanego algorytmu. Zapoznaj się z przykładami, aby zademonstrować do konkretnych zastosowań.
Atrybuty, które zastosuj do elementu najwyższego poziomu
<GenerateJWS name="JWS" 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. W nazwie można używać tylko następujących znaków:
A-Z0-9._\-$ % Interfejs zarządzania brzegowego wymusza jednak dodatkowe
takich jak automatyczne usuwanie znaków innych niż alfanumeryczne.
Opcjonalnie możesz użyć elementu |
Nie dotyczy | Wymagane |
continueOnError |
Ustaw jako false , aby w przypadku niepowodzenia zasady zwracany był błąd. To normalne
w przypadku większości zasad.
Ustaw jako |
fałsz | Opcjonalnie |
włączone |
Aby egzekwować zasadę, ustaw wartość true .
Ustaw „Wyłącz” na: |
prawda | Opcjonalnie |
asynchroniczny | Ten atrybut został wycofany. | fałsz | Wycofano |
<DisplayName>
<DisplayName>Policy Display Name</DisplayName>
Użyj oprócz atrybutu name [nazwa], aby oznaczyć zasadę etykietą w edytorze serwera proxy w interfejsie zarządzania z 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 |
<AdditionalHeaders/Claim>
<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 nazwa/wartość żądania w nagłówku kodu JWS.
Domyślnie | Nie dotyczy |
Obecność | Opcjonalnie |
Prawidłowe wartości | Każda wartość, która ma być używana w dodatkowym roszczeniu. Możesz określić jako ciąg, liczbę, wartość logiczną, mapę lub tablicę. |
Element <Claim>
ma te atrybuty:
- name – (wymagany) nazwa roszczenia.
- ref – (opcjonalny) nazwa zmiennej przepływu. Jeśli ten parametr jest obecny, zasada użyje wartości tego parametru jako twierdzenia. Jeśli podasz zarówno atrybut ref, jak i jednoznaczną wartość roszczenia, w parametrze wartość wyraźna jest wartością domyślną i jest używana, jeśli wskazana zmienna przepływu nie została rozwiązana.
- type – (opcjonalny) jeden z: ciąg (wartość domyślna), liczba, wartość logiczna lub mapa.
- array – (opcjonalny) ustaw wartość true, aby wskazać, czy wartość jest tablicą typów. Domyślne: false (fałsz).
<CriticalHeaders>
<CriticalHeaders>a,b,c</CriticalHeaders> or: <CriticalHeaders ref=’variable_containing_headers’/>
Dodaje nagłówek krytyczny (crit) do pliku JWS. nagłówek crit, to tablica nazw nagłówków, które muszą być znane i rozpoznane przez odbiornik JWS. Na przykład:
{ “typ: “...”, “alg” : “...”, “crit” : [ “a”, “b”, “c” ], }
W czasie działania zasadaVerifyJWS sprawdza nagłówek crit.
W przypadku każdego nagłówka wymienionego w nagłówku crit sprawdza, czy element <KnownHeaders>
zasady VerifyJWS zawiera również ten nagłówek. Dowolny nagłówek znaleziony przez zasadę VerifyJWS w pliku crit
który nie jest wymieniony w tabeli <KnownHeaders>
, powoduje błąd zasady VerifyJWS.
Domyślnie | Nie dotyczy |
Obecność | Opcjonalnie |
Typ | Tablica ciągów znaków rozdzielonych przecinkami |
Prawidłowe wartości | Tablica lub nazwa zmiennej zawierającej tablicę. |
<DetachContent>
<DetachContent>true|false</DetachContent>
Określa, czy komponent JWS ma być generowany z odłączonym ładunkiem (<DetachContent>true</DetachContent>
),
lub nie, <DetachContent>false</DetachContent>
.
Jeśli podasz wartość false (fałsz), domyślnym kodem JWS będzie następujący format:
header.payload.signature
Jeśli ustawisz wartość true, aby utworzyć ładunek odłączony, wygenerowany JWS pominie ten ładunek i ma postać:
header..signature
W przypadku odłączonego ładunku to Ty decydujesz, czy chcesz przekazać oryginalny, niezakodowany ładunek do zasadyVerifyJWS.
za pomocą elementu <DetachedContent>
zasady VerifyJWS.
Domyślnie | fałsz |
Obecność | Opcjonalnie |
Typ | Wartość logiczna |
Prawidłowe wartości | prawda lub fałsz |
<IgnoreUnresolvedVariables>
<IgnoreUnresolvedVariables>true|false</IgnoreUnresolvedVariables>
Jeśli chcesz, aby zasada zwracała błąd, gdy określona zmienna jest wskazana, ustaw wartość Fałsz. jest nierozstrzygnięta. Ustaw wartość „true”, aby traktować każdą nierozpoznawalną 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 |
<OutputVariable>
<OutputVariable>JWS-variable</OutputVariable>
Określa, gdzie ma zostać umieszczony klucz JWS wygenerowany przez tę zasadę. Domyślnie jest on umieszczany w sekcji
zmienna przepływu: jws.POLICYNAME.generated_jws
.
Domyślnie | jws.POLICYNAME.generated_jws |
Obecność | Opcjonalnie |
Typ | Ciąg znaków (nazwa zmiennej przepływu) |
<Payload>
<Payload ref="flow-variable-name-here" /> or <Payload>payload-value</Payload>
Określa nieprzetworzony, niezakodowany ładunek JWS. Określ zmienną zawierającą ładunek lub ciąg znaków.
.Domyślnie | Nie dotyczy |
Obecność | Wymagane |
Typ | Ciąg, tablica bajtów, strumień lub dowolna inna reprezentacja niezakodowanego ładunku JWS. |
<PrivateKey/Id>
<PrivateKey> <Id ref="flow-variable-name-here"/> </PrivateKey> or <PrivateKey> <Id>your-id-value-here</Id> </PrivateKey>
Określa identyfikator klucza (kid) do uwzględnienia w nagłówku JWS. Tylko używanie gdy algorytm to 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 znaków przepływu |
<PrivateKey/Password>
<PrivateKey> <Password ref="private.privatekey-password"/> </PrivateKey>
W razie potrzeby podaj hasło, którego zasada ma używać do odszyfrowania klucza prywatnego. Użyj ref, aby przekazać klucz w zmiennej przepływu. Tylko używanie gdy algorytm to 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 |
Odwołanie do zmiennej przepływu.
Uwaga: musisz określić zmienną przepływu. Edge odrzuci jako nieprawidłową
konfiguracji zasad, w której hasło jest określone w postaci zwykłego tekstu. Zmienna przepływu
musi mieć prefiks „prywatny”. Na przykład: |
<PrivateKey/Value>
<PrivateKey> <Value ref="private.variable-name-here"/> </PrivateKey>
Określa klucz prywatny zakodowany w formacie PEM, który jest używany do podpisywania klucza JWS. Użyj atrybutu ref, aby przekazać w zmiennej przepływu. Używaj tylko wtedy, gdy algorytm to RS256/RS384/RS512, PS256/PS384/PS512 lub ES256/ES384/ES512.
Domyślnie | Nie dotyczy |
Obecność | Wymagane do generowania kodu JWS przy użyciu 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 „prywatna”. Przykład:
|
<SecretKey/Id>
<SecretKey> <Id ref="flow-variable-name-here"/> </SecretKey> or <SecretKey> <Id>your-id-value-here</Id> </SecretKey>
Określa identyfikator klucza (kid) do uwzględnienia w nagłówku JWS klucza JWS podpisanego za pomocą HMAC algorytmem bezpieczeństwa. Używaj tylko wtedy, gdy algorytm należy do kategorii HS256/HS384/HS512.
Domyślnie | Nie dotyczy |
Obecność | Opcjonalnie |
Typ | Ciąg znaków |
Prawidłowe wartości | Zmienna lub ciąg znaków przepływu |
<SecretKey/Value>
<SecretKey> <Value ref="private.your-variable-name"/> </SecretKey>
Udostępnia tajny klucz używany do weryfikacji lub podpisywania tokenów za pomocą algorytmu HMAC. Tylko używanie gdy algorytm to HS256/HS384/HS512. Użyj atrybutu ref. aby przekazać klucz w zmiennej przepływu.
Edge wymusza minimalną siłę klucza w algorytmach HS256/HS384/HS512. Minimalna długość klucza W przypadku HS256 – 32 bajty, w przypadku HS384 – 48 bajtów, a w przypadku HS512 – 64 bajty. Użycie klucza o mniejszej mocy powoduje błąd środowiska wykonawczego.
Domyślnie | Nie dotyczy |
Obecność | Wymagane 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: zmienna przepływu musi mieć prefiks „private”. Dla:
przykład: |
Zmienne przepływu
Zasada Wygeneruj JWS nie ustawia zmiennych przepływu.
Informacje o błędzie
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 w przypadku tych 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.jws.GenerationFailed |
401 | Za pomocą zasady nie udało się wygenerować pakietu JWS. |
steps.jws.InsufficientKeyLength |
401 | Dla klucza krótszego niż 32 bajty dla algorytmu HS256 |
steps.jws.InvalidClaim |
401 | Brak zgodności z deklaracją lub zgłoszeniem albo brak zgodności nagłówka lub nagłówka. |
steps.jws.InvalidCurve |
401 | Krzywa określona przez klucz jest nieprawidłowa dla algorytmu krzywych eliptycznych. |
steps.jws.InvalidJsonFormat |
401 | W nagłówku JWS znaleziono nieprawidłowy kod JSON. |
steps.jws.InvalidPayload |
401 | Ładunek JWS jest nieprawidłowy. |
steps.jws.InvalidSignature |
401 | Element <DetachedContent> jest pominięty, a JWS ma odłączony ładunek treści. |
steps.jws.KeyIdMissing |
401 | Zasada weryfikacji używa JWKS jako źródła kluczy publicznych, ale podpisany JWS nie zawiera w nagłówku właściwości kid . |
steps.jws.KeyParsingFailed |
401 | Nie udało się przeanalizować klucza publicznego na podstawie podanych informacji o kluczu. |
steps.jws.MissingPayload |
401 | Brak ładunku JWS. |
steps.jws.NoAlgorithmFoundInHeader |
401 | Występuje, gdy JWS pomija nagłówek algorytmu. |
steps.jws.SigningFailed |
401 | W WygenerujJWS klucz mniejszy niż minimalny rozmiar algorytmów HS384 lub HS512 |
steps.jws.UnknownException |
401 | Wystąpił nieznany wyjątek. |
steps.jws.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 | Występuje, gdy |
---|---|
InvalidAlgorithm |
Jedyne prawidłowe wartości to: RS256, RS384, RS512, PS256, PS384, PS512, ES256, ES384, ES512, HS256, HS384, HS512. |
|
Inne możliwe błędy wdrażania. |
Zmienne błędów
Te zmienne są ustawiane po wystąpieniu błędu działania. Więcej informacji znajdziesz w artykule Podstawowe informacje 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 czasu działania powyżej. Nazwa błędu to ostatnia część kodu błędu. | fault.name Matches "TokenExpired" |
JWS.failed |
Wszystkie zasady JWS ustawiają tę samą zmienną w przypadku awarii. | jws.JWS-Policy.failed = true |
Przykładowa odpowiedź na błąd
W przypadku obsługi błędów sprawdzoną metodą jest przechwycenie części błędu errorcode
.
. Nie polegaj na tekście zawartym w pliku faultstring
, ponieważ może się on zmienić.
Przykładowa reguła błędu
<FaultRules> <FaultRule name="JWS Policy Errors"> <Step> <Name>JavaScript-1</Name> <Condition>(fault.name Matches "TokenExpired")</Condition> </Step> <Condition>JWS.failed=true</Condition> </FaultRule> </FaultRules>