Wyświetlasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X. info
Co
Generuje podpisany JWS z konfigurowalnym zestawem deklaracji. JWS można następnie zwrócić klientom, przesłać do miejsc docelowych backendu lub wykorzystać w inny sposób. Szczegółowe wprowadzenie znajdziesz w artykule Omówienie zasad JWS i JWT.
Informacje o elementach JWS oraz o sposobie 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 przypadku tokena JWS.
Przykłady
- Generowanie dołączonego podpisu JWS podpisanego algorytmem HS256
- Wygeneruj odłączony podpis JWS podpisany algorytmem RS256
Wygeneruj załączony podpis JWS podpisany algorytmem HS256.
Ta przykładowa zasada generuje dołączony JWS i podpisuje go za pomocą algorytmu HS256. HS256 opiera się na udostępnionym haśle do podpisywania i weryfikowania podpisu.
Załączony JWS zawiera zakodowany nagłówek, ładunek i podpis:
header.payload.signature
Ustaw wartość <DetachContent> na true, aby wygenerować odłączone treści.
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. Gdy to działanie zasady zostanie wywołane, Edge zakoduje nagłówek i ładunek JWS, a następnie doda zakodowany podpis, aby cyfrowo podpisać JWS.
Konfiguracja zasad poniżej 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 podpis JWS podpisany algorytmem RS256.
Ten przykład zasad generuje odłączony JWS i podpisuje go za pomocą algorytmu RS256. Generowanie podpisu RS256 wymaga klucza prywatnego RSA, który musi być podany w formacie PEM.
Odłączony JWS nie zawiera ładunku:
header..signature
Użyj elementu <Payload>, aby określić nieprzetworzony, niezakodowany ładunek JWS.
Gdy ta zasada jest aktywowana, Edge koduje nagłówek i ładunek JWS, a następnie używa ich do wygenerowania zakodowanego podpisu. Wygenerowany JWS nie zawiera jednak ładunku.
To Ty musisz przekazać ładunek do zasady VerifyJWS za pomocą elementu <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>
Ustawianie kluczowych elementów
Elementy, których używasz do określania klucza używanego do generowania 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 kluczy znajdziesz w artykule Algorytmy szyfrowania podpisów. | ||
Odwołanie do elementu w przypadku funkcji Generate JWS
Dokumentacja zasady Generate JWS opisuje elementy i atrybuty tej zasady.
Uwaga: konfiguracja będzie się nieco różnić w zależności od używanego algorytmu szyfrowania. Przykłady konfiguracji dla konkretnych przypadków użycia znajdziesz w sekcji Przykłady.
Atrybuty, które mają zastosowanie do elementu najwyższego poziomu
<GenerateJWS name="JWS" continueOnError="false" enabled="true" async="false">
Te atrybuty są wspólne dla wszystkich elementów nadrzędnych zasad.
| Atrybut | Opis | Domyślna | Obecność |
|---|---|---|---|
| nazwa |
Wewnętrzna nazwa zasady. W nazwie możesz używać tylko tych znaków:A-Z0-9._\-$ %. Interfejs zarządzania Edge wymusza jednak dodatkowe ograniczenia, takie jak automatyczne usuwanie znaków, które nie są alfanumeryczne.
Opcjonalnie możesz użyć elementu |
Nie dotyczy | Wymagane |
| continueOnError |
Ustaw wartość false, aby zwracać błąd, gdy zasada nie działa. Jest to prawidłowe działanie w przypadku większości zasad.
Ustaw wartość |
fałsz | Opcjonalny |
| włączone |
Ustaw wartość true, aby wymusić stosowanie zasady.
Ustaw wartość |
prawda | Opcjonalny |
| asynchroniczny | Ten atrybut został wycofany. | fałsz | Wycofano |
<DisplayName>
<DisplayName>Policy Display Name</DisplayName>
Użyj tego atrybutu w połączeniu z atrybutem name, aby oznaczyć zasadę w edytorze proxy interfejsu zarządzania inną nazwą w języku naturalnym.
| Domyślna | Jeśli pominiesz ten element, zostanie użyta wartość atrybutu name zasady. |
| Obecność | Opcjonalny |
| Typ | Ciąg znaków |
<Algorithm>
<Algorithm>algorithm-here</Algorithm>
Określa algorytm szyfrowania do podpisywania tokena.
| Domyślna | 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ść roszczenia w nagłówku JWS.
| Domyślna | Nie dotyczy |
| Obecność | Opcjonalny |
| Prawidłowe wartości | Dowolna wartość, której chcesz użyć w przypadku dodatkowego roszczenia. Możesz podać roszczenie w postaci ciągu znaków, liczby, wartości logicznej, mapy lub tablicy. |
Element <Claim> ma te atrybuty:
- name – (wymagany) nazwa deklaracji.
- ref – (opcjonalnie) nazwa zmiennej przepływu. Jeśli ta zmienna jest obecna, zasada użyje jej wartości jako roszczenia. Jeśli podasz zarówno atrybut ref, jak i wartość roszczenia, wartość roszczenia będzie domyślna i zostanie użyta, jeśli odwołanie do zmiennej przepływu nie zostanie rozpoznane.
- type – (opcjonalnie) jeden z tych typów: string (domyślnie), number, boolean lub map.
- array – (opcjonalnie) ustaw na true, aby wskazać, czy wartość jest tablicą typów. Domyślnie: false.
<CriticalHeaders>
<CriticalHeaders>a,b,c</CriticalHeaders> or: <CriticalHeaders ref=’variable_containing_headers’/>
Dodaje do JWS nagłówek krytyczny crit. Nagłówek crit to tablica nazw nagłówków, które muszą być znane i rozpoznawane przez odbiorcę JWS. Na przykład:
{
“typ: “...”,
“alg” : “...”,
“crit” : [ “a”, “b”, “c” ],
}W czasie działania zasady VerifyJWS sprawdzają nagłówek crit.
W przypadku każdego nagłówka wymienionego w nagłówku crit sprawdza, czy element <KnownHeaders> zasady VerifyJWS również zawiera ten nagłówek. Każdy nagłówek, który zasada VerifyJWS znajdzie w parametrze crit, a którego nie ma na liście <KnownHeaders>, spowoduje niepowodzenie zasady VerifyJWS.
| Domyślna | Nie dotyczy |
| Obecność | Opcjonalny |
| 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 wygenerować JWS z odłączonym ładunkiem danych (<DetachContent>true</DetachContent>), czy nie (<DetachContent>false</DetachContent>).
Jeśli określisz wartość „false” (domyślną), wygenerowany JWS będzie miał postać:
header.payload.signature
Jeśli określisz wartość „true”, aby utworzyć odłączony ładunek, wygenerowany JWS pominie ładunek i będzie miał postać:
header..signature
W przypadku odłączonego ładunku musisz przekazać oryginalny, niezakodowany ładunek do zasady VerifyJWS za pomocą elementu <DetachedContent> zasady VerifyJWS.
| Domyślna | fałsz |
| Obecność | Opcjonalny |
| Typ | Wartość logiczna |
| Prawidłowe wartości | true or false |
<IgnoreUnresolvedVariables>
<IgnoreUnresolvedVariables>true|false</IgnoreUnresolvedVariables>
Ustaw wartość „fałsz”, jeśli chcesz, aby zasada zgłaszała błąd, gdy nie można rozpoznać żadnej zmiennej, do której odwołuje się zasada. Ustaw wartość „true”, aby traktować każdą nierozwiązywalną zmienną jako pusty ciąg (null).
| Domyślna | fałsz |
| Obecność | Opcjonalny |
| Typ | Wartość logiczna |
| Prawidłowe wartości | true or false |
<OutputVariable>
<OutputVariable>JWS-variable</OutputVariable>
Określa, gdzie umieścić JWS wygenerowany przez tę zasadę. Domyślnie jest ona umieszczana w zmiennej przepływu jws.POLICYNAME.generated_jws.
| Domyślna | jws.POLICYNAME.generated_jws |
| Obecność | Opcjonalny |
| Typ | Ciąg znaków (nazwa zmiennej przepływu) |
<Payload>
<Payload ref="flow-variable-name-he>re&quo<t; / o>r Payloadpay<load-val>ue/Payload
Określa nieprzetworzony, niezakodowany ładunek JWS. Określ zmienną zawierającą ładunek lub ciąg znaków.
| Domyślna | Nie dotyczy |
| Obecność | Wymagane |
| Typ | Ciąg znaków, tablica bajtów, strumień lub dowolna inna reprezentacja niezakodowanego ładunku JWS. |
<PrivateKey/Id>
<PrivateKey> <Id ref="flow-variable-name-h>e<re"/ />Privat<eKey or >Pri<va>teKey Idyour-id-<val>u<e-here/Id />PrivateKey
Określa identyfikator klucza (kid), który ma zostać uwzględniony w nagłówku JWS. Używaj tylko wtedy, gdy algorytm to RS256/RS384/RS512, PS256/PS384/PS512 lub ES256/ES384/ES512.
| Domyślna | Nie dotyczy |
| Obecność | Opcjonalny |
| Typ | Ciąg znaków |
| Prawidłowe wartości | Zmienna przepływu lub ciąg znaków |
<PrivateKey/Password>
<PrivateKey> <Password ref="private.privatekey-passw>o<rd"/ />PrivateKey
W razie potrzeby podaj hasło, którego zasady powinny używać do odszyfrowywania klucza prywatnego. Użyj atrybutu ref, aby przekazać klucz w zmiennej przepływu. Używaj tylko wtedy, gdy algorytm to RS256/RS384/RS512, PS256/PS384/PS512 lub ES256/ES384/ES512.
| Domyślna | Nie dotyczy |
| Obecność | Opcjonalny |
| 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ą konfigurację zasad, w której hasło jest podane w postaci zwykłego tekstu. Zmienna przepływu musi mieć prefiks „private”. Na przykład |
<PrivateKey/Value>
<PrivateKey> <Value ref="private.variable-name-h>e<re"/ />PrivateKey
Określa klucz prywatny z kodowaniem PEM używany do podpisywania JWS. Użyj atrybutu ref, aby przekazać klucz w zmiennej przepływu. Używaj tylko wtedy, gdy algorytm to RS256/RS384/RS512, PS256/PS384/PS512 lub ES256/ES384/ES512.
| Domyślna | Nie dotyczy |
| Obecność | Wymagane do wygenerowania 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 z kodowaniem PEM.
Uwaga: zmienna przepływu musi mieć prefiks „private”. Na przykład: |
<SecretKey/Id>
<SecretKey> <Id ref="flow-variable-name-h>e<re"/ >/Secre<tKey or > Se<cr>etKey Idyour-id-<val>u<e-here/Id >/SecretKey
Określa identyfikator klucza (kid), który ma być uwzględniony w nagłówku JWS podpisanym algorytmem HMAC. Używaj tylko wtedy, gdy algorytm to HS256, HS384 lub HS512.
| Domyślna | Nie dotyczy |
| Obecność | Opcjonalny |
| Typ | Ciąg znaków |
| Prawidłowe wartości | Zmienna przepływu lub ciąg znaków |
<SecretKey/Value>
<SecretKey> <Value ref="private.your-variable-n>a<me"/ >/SecretKey
Zawiera klucz tajny używany do weryfikacji lub podpisywania tokenów za pomocą algorytmu HMAC. Używaj tylko wtedy, gdy algorytm to HS256/HS384/HS512. Użyj atrybutu ref, aby przekazać klucz w zmiennej przepływu.
Edge wymusza minimalną siłę klucza w przypadku algorytmów HS256/HS384/HS512. 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 mniejszej sile powoduje błąd w czasie działania.
| Domyślna | Nie dotyczy |
| Obecność | Wymagane w przypadku algorytmów HMAC. |
| Typ | Ciąg znaków |
| Prawidłowe wartości |
zmienna przepływu odwołująca się do ciągu znaków;
Uwaga: jeśli jest to zmienna przepływu, musi mieć prefiks „private”. Na przykład |
Zmienne przepływu
Zasada Generate JWS nie ustawia zmiennych przepływu.
Odniesienie do błędu
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>