Przeglądasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X. Informacje
Co
Generuje podpisany JWS z konfigurowalnym zestawem deklaracji. JWS może być następnie zwracany do klientów, przesyłany do celów backendu lub wykorzystywany w inny sposób. Szczegółowe informacje znajdziesz w omówieniu zasad JWS i JWT.
Informacje o częściach JWS oraz sposobach ich szyfrowania i podpisywania znajdziesz w dokumencie RFC7515.
Wideo
Obejrzyj krótki film, aby dowiedzieć się, jak wygenerować podpisany token JWT. Ten film dotyczy generowania tokena JWT, ale wiele koncepcji jest takich samych w JWS.
Przykłady
- Wygeneruj załączony algorytm JWS podpisany za pomocą algorytmu HS256
- Wygeneruj odłączony interfejs JWS podpisany algorytmem RS256
Wygeneruj załączony algorytm JWS podpisany za pomocą algorytmu HS256
Ta przykładowa zasada generuje dołączony pakiet JWS i podpisuje go algorytmem HS256. HS256 wykorzystuje wspólny obiekt tajny do podpisywania i weryfikacji podpisu.
Załączony JWS zawiera zakodowany nagłówek, ładunek i podpis:
header.payload.signature
Aby generować odłączone treści, ustaw <DetachContent>
na „true”.
Więcej informacji o strukturze i formacie JWS znajdziesz w sekcji Elementy JWS/JWT.
Użyj elementu <Payload>
, aby określić nieprzetworzony, niezakodowany ładunek JWS.
W tym przykładzie zmienna zawiera ładunek. Po uruchomieniu tego działania zasady Edge koduje nagłówek i ładunek JWS, a następnie dodaje zakodowany podpis w celu cyfrowego podpisywania JWS.
Poniższa konfiguracja zasad tworzy 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 interfejs JWS podpisany algorytmem RS256
Ta przykładowa zasada generuje odłączony interfejs JWS i podpisuje je 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.
Odłączony JWS pomija ładunek z JWS:
header..signature
Użyj elementu <Payload>
, aby określić nieprzetworzony, niezakodowany ładunek JWS.
Po uruchomieniu tej zasady Edge koduje nagłówek i ładunek JWS, a następnie używa ich do wygenerowania zakodowanego podpisu. Wygenerowany JWS pominie jednak ładunek.
Do Ciebie należy przekazywanie ładunku do zasady VerificationJWS za pomocą elementu <DetachedContent>
zasadyVerifyJWS.
<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, których używasz do określenia klucza użytego do wygenerowania JWS, 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 |
|
* Więcej informacji o wymaganiach dotyczących klucza znajdziesz w artykule Informacje o algorytmach szyfrowania podpisów. |
Dokumentacja elementu dla generowania JWS
Dokumentacja zasad zawiera opis elementów i atrybutów zasady generowania JWS.
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
<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. 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 |
<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 |
<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 nazwa/wartość roszczenia w nagłówku JWS.
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 do pliku JWS nagłówek krytyczny crit. Nagłówek crit to tablica nazw nagłówków, które muszą być znane i rozpoznawane 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 ona, czy element <KnownHeaders>
zasady WeryfikacjaJWS również zawiera ten nagłówek. Każdy nagłówek, który jest znaleziony w elemencie crit przez zasadę WeryfikacjaJWS, a nie wymieniony w zasadzie <KnownHeaders>
, powoduje niepowodzenie zasadyVerifyJWS.
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ę. |
<DetachContent>
<DetachContent>true|false</DetachContent>
Określa, czy ma być generowany JWS z odłączonym ładunkiem (<DetachContent>true</DetachContent>
), czy nie (<DetachContent>false</DetachContent>
).
Jeśli podasz wartość false (fałsz), wygenerowany plik JWS będzie miał domyślną postać:
header.payload.signature
Jeśli podasz wartość true, aby utworzyć ładunek odłączony, wygenerowany JWS pominie ładunek i będzie miał postać:
header..signature
W przypadku odłączonego ładunku to Ty decydujesz o tym, czy chcesz przekazać oryginalny niezakodowany ładunek do zasadyVerifyJWS, korzystając z elementu <DetachedContent>
zasadyVerifyJWS.
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 |
<OutputVariable>
<OutputVariable>JWS-variable</OutputVariable>
Określa, gdzie należy umieścić oprogramowanie JWS wygenerowane przez tę zasadę. Domyślnie jest on umieszczony w zmiennej 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 tekstowy, 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. 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: |
<PrivateKey/Value>
<PrivateKey> <Value ref="private.variable-name-here"/> </PrivateKey>
Określa klucz prywatny zakodowany w formacie PEM używany do podpisywania JWS. 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 generowania JWS 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: |
<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 JWS pliku JWS podpisanego za pomocą algorytmu 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. |
Zmienne przepływu
Zasada Wygeneruj JWS 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 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, 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" |
JWS.failed |
Wszystkie zasady JWS ustawiają tę samą zmienną w przypadku niepowodzenia. | jws.JWS-Policy.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="JWS Policy Errors"> <Step> <Name>JavaScript-1</Name> <Condition>(fault.name Matches "TokenExpired")</Condition> </Step> <Condition>JWS.failed=true</Condition> </FaultRule> </FaultRules>