Wyświetlasz dokumentację Apigee Edge.
Przejdź do
dokumentacji Apigee X. info
Oblicza i weryfikuje kod uwierzytelniania wiadomości przy użyciu wartości hash (HMAC). HMAC, czasami nazywany kodem uwierzytelniania wiadomości przy użyciu wartości hash w formie klucza lub kodem uwierzytelniania wiadomości przy użyciu wartości hash w formie klucza, używa kryptograficznej funkcji skrótu, takiej jak SHA-1, SHA-224, SHA-256, SHA-384, SHA-512 lub MD-5, stosowanej do "wiadomości" wraz z kluczem tajnym, aby wygenerować podpis lub kod uwierzytelniania wiadomości. Termin "wiadomość" odnosi się tutaj do dowolnego strumienia bajtów. Nadawca wiadomości może też wysłać do odbiorcy kod HMAC, a odbiorca może go użyć do uwierzytelnienia wiadomości.
Więcej informacji o HMAC, znajdziesz w dokumencie HMAC: Keyed-Hashing for Message Authentication (rfc2104).
Przykłady
Generowanie HMAC
<HMAC name='HMAC-1'> <Algorithm>SHA256</Algorithm> <SecretKey ref='private.secretkey'/> <IgnoreUnresolvedVariables>true|false</IgnoreUnresolvedVariables> <!-- optional --> <!-- The "message" can include fixed and multiple variable parts, including newlines and static functions. Whitespace is significant. --> <Message>Fixed Part {a_variable} {timeFormatUTCMs(timeFormatString1,system.timestamp)} {nonce} </Message> <!-- default encoding is base64 --> <Output encoding='base16'>name_of_variable</Output> </HMAC>
Weryfikowanie HMAC
<HMAC name='HMAC-1'> <Algorithm>SHA256</Algorithm> <SecretKey ref='private.secretkey'/> <IgnoreUnresolvedVariables>true|false</IgnoreUnresolvedVariables> <!-- optional --> <!-- The "message" can include fixed and multiple variable parts, including newlines and static functions. Whitespace is significant. --> <Message>Fixed Part {a_variable} {timeFormatUTCMs(timeFormatString1,system.timestamp)} {nonce} </Message> <!-- VerificationValue is optional. Include it to perform an HMAC check. --> <VerificationValue encoding='base16' ref='expected_hmac_value'/> <!-- default encoding is base64 --> <Output encoding='base16'>name_of_variable</Output> </HMAC>
Obliczanie podpisu i jego weryfikacja przebiegają dokładnie tak samo proces. Zasada HMAC oblicza kod HMAC i opcjonalnie może zweryfikować obliczony podpis z oczekiwaną wartością. Opcjonalny element `VerificationValue` (jeśli występuje) nakazuje zasadzie sprawdzenie obliczonej wartości z znaną lub podaną wartością.
Dokumentacja elementu HMAC
Dokumentacja zasady opisuje elementy i atrybuty zasady HMAC.
Atrybuty, które mają zastosowanie do elementu najwyższego poziomu
<HMAC name="HMAC" continueOnError="false" enabled="true" async="false">
Te atrybuty są wspólne dla wszystkich elementów nadrzędnych zasad.
| Atrybut | Opis | Domyślna | Obecność |
|---|---|---|---|
| name |
Wewnętrzna nazwa zasady. W nazwie można używać tylko tych znaków:
A-Z0-9._\-$ %. Interfejs Apigee wymusza jednak dodatkowe
ograniczenia, np. automatycznie usuwa znaki, 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 oczekiwane
zachowanie w przypadku większości zasad.
Ustaw wartość |
fałsz | Opcjonalny |
| enabled |
Ustaw wartość true, aby wymusić stosowanie zasady.
Ustaw wartość |
prawda | Opcjonalny |
| async | Ten atrybut został wycofany. | fałsz | Wycofano |
<Algorithm>
<Algorithm>algorithm-name</Algorithm>
Określa algorytm skrótu do obliczania HMAC.
| Domyślna | Nie dotyczy |
| Obecność | Wymagane |
| Typ | Ciąg znaków |
| Prawidłowe wartości | SHA-1, SHA-224, SHA-256, SHA-384,
SHA-512, i MD-5
Konfiguracja zasady akceptuje nazwy algorytmów bez rozróżniania wielkości liter oraz
z łącznikiem między literami i cyframi lub bez niego . Na przykład |
<DisplayName>
<DisplayName>Policy Display Name</DisplayName>
Użyj tego atrybutu oprócz atrybutu name, aby oznaczyć zasadę w edytorze proxy w interfejsie Apigee 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 |
<Message>
<Message>message_template_here</Message> or <Message ref='variable_here'/>
Określa ładunek wiadomości do podpisania. Dane wejściowe tego elementu obsługują szablony wiadomości (podstawianie zmiennych), aby umożliwić dołączanie dodatkowych elementów w czasie działania, takich jak sygnatury czasowe, nonce, listy nagłówków lub inne informacje. Na przykład:
<Message>Fixed Part {a_variable} {timeFormatUTCMs(timeFormatString1,system.timestamp)} {nonce} </Message>
Szablon wiadomości może zawierać stałe i zmienne części, w tym nowe wiersze i funkcje statyczne. Białe znaki mają znaczenie.
| Domyślna | Nie dotyczy |
| Obecność | Wymagane |
| Typ | Ciąg znaków |
| Prawidłowe wartości | Wartością tekstową może być dowolny ciąg znaków. Jeśli podasz atrybut ref,
będzie on miał pierwszeństwo przed wartością tekstową. Zasada traktuje wartość tekstową
lub zmienną, do której się odwołuje, jako szablon wiadomości. |
<Output>
<Output encoding='encoding_name'>variable_name</Output>
Określa nazwę zmiennej, którą zasada powinna ustawić na obliczoną wartość HMAC. Określa też kodowanie, które ma być używane w przypadku danych wyjściowych.
| Domyślna |
Domyślna zmienna wyjściowa to Domyślna wartość atrybutu |
| Obecność | Opcjonalny. Jeśli ten element nie jest obecny, zasada ustawia zmienną przepływu
hmac.POLICYNAME.output, z wartością zakodowaną w formacie base64. |
| Typ | Ciąg znaków |
| Prawidłowe wartości | W przypadku kodowania: Wartości nie uwzględniają wielkości liter. Wartością tekstową elementu |
<SecretKey>
<SecretKey encoding='encoding_name' ref='private.secretkey'/>
Określa klucz tajny używany do obliczania HMAC. Klucz jest pobierany z zmiennej, do której się odwołuje , i dekodowany zgodnie z określonym kodowaniem.
| Domyślna |
W przypadku zmiennej, do której się odwołuje, nie ma wartości domyślnej.
Atrybut Jeśli nie ma atrybutu |
| Obecność | Wymagane |
| Typ | Ciąg znaków |
| Prawidłowe wartości | W przypadku Użycie atrybutu encoding pozwala określić klucz, który zawiera bajty spoza zakresu znaków drukowalnych UTF-8. Załóżmy na przykład, że konfiguracja zasady zawiera te elementy: <SecretKey encoding='hex' ref='private.encodedsecretkey'/>
Załóżmy też, że
W takim przypadku bajty klucza zostaną zdekodowane jako: [53 65 63 72 65 74 31 32 33]
(każdy bajt jest reprezentowany w postaci szesnastkowej). Inny przykład: jeśli |
<VerificationValue>
<VerificationValue encoding='encoding_name' ref='variable_name'/> or <VerificationValue encoding='encoding_name'>string_value</VerificationValue>
(Opcjonalnie) Określa wartość weryfikacji oraz algorytm kodowania, który został użyty do zakodowania tej wartości. Zasada użyje tego algorytmu do zdekodowania wartości.
| Domyślna | Nie ma domyślnej wartości weryfikacji. Jeśli element jest obecny, ale brakuje atrybutu
encoding, zasada używa domyślnego kodowania base64. |
| Obecność | Opcjonalny |
| Typ | Ciąg znaków |
| Prawidłowe wartości |
Prawidłowe wartości atrybutu encoding to: Kodowanie elementu |
<IgnoreUnresolvedVariables>
<IgnoreUnresolvedVariables>true|false</IgnoreUnresolvedVariables>
Ustaw wartość false, jeśli chcesz, aby zasada zgłaszała błąd, gdy nie można rozpoznać żadnej zmiennej, do której się odwołuje. Ustaw wartość true, aby traktować każdą nierozpoznawalną zmienną jako pusty ciąg znaków
(null).
Wartość logiczna IgnoreUnresolvedVariables wpływa tylko na zmienne, do których odwołuje się
szablon wiadomości. Zarówno SecretKey jak i VerificationValue mogą odwoływać się do zmiennej, ale obie
muszą być rozpoznawalne, więc ustawienie ignore nie ma do nich zastosowania.
| Domyślna | Fałsz |
| Obecność | Opcjonalny |
| Typ | Wartość logiczna |
| Prawidłowe wartości | true or false |
Zmienne przepływu
Podczas wykonywania zasada może ustawiać te zmienne.
| Zmienna | Opis | Przykład |
|---|---|---|
hmac.policy_name.message |
Zasada ustawia tę zmienną na efektywną wiadomość,
czyli wynik oceny szablonu wiadomości określonego w elemencie Message. |
hmac.HMAC-Policy.message = "Hello, World" |
hmac.policy_name.output |
Pobiera wynik obliczenia HMAC, gdy element Output nie określa nazwy zmiennej. |
hmac.HMAC-Policy.output = /yyRjydfP+fBHTwXFgc5AZhLAg2kwCri+e35girrGw4= |
hmac.policy_name.outputencoding |
Pobiera nazwę kodowania wyjściowego. | hmac.HMAC-Policy.outputencoding = base64 |
Informacje o błędach
W tej sekcji opisujemy kody błędów i komunikaty o błędach, które są zwracane, a także zmienne błędów ustawiane przez Apigee, 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.hmac.UnresolvedVariable |
401 | Ten błąd występuje, jeśli zmienna określona w zasadzie HMAC:
|
steps.hmac.HmacVerificationFailed |
401 | Weryfikacja HMAC nie powiodła się. Podana wartość weryfikacji nie pasuje do obliczonej wartości. |
steps.hmac.HmacCalculationFailed |
401 | Nie udało się obliczyć wartości HMAC. |
steps.hmac.EmptySecretKey |
401 | Wartość zmiennej klucza obiektu tajnego jest pusta. |
steps.hmac.EmptyVerificationValue |
401 | Zmienna przechowująca wartość weryfikacji jest pusta. |
Błędy wdrażania
Te błędy mogą wystąpić podczas wdrażania serwera proxy zawierającego te zasady.
| Nazwa błędu | Stan HTTP | Występuje, gdy |
|---|---|---|
steps.hmac.MissingConfigurationElement |
401 | Ten błąd występuje, gdy brakuje wymaganego elementu lub atrybutu. |
steps.hmac.InvalidValueForElement |
401 | Ten błąd występuje, jeśli wartość określona w elemencie algorytmu nie jest jedną z tych wartości: SHA-1, SHA-224, SHA-256, SHA-512 lub MD-5. |
steps.hmac.InvalidSecretInConfig |
401 | Ten błąd występuje, jeśli w polu SecretKey podano jawnie wartość tekstową. |
steps.hmac.InvalidVariableName |
401 | Ten błąd występuje, jeśli zmienna SecretKey nie zawiera prefiksu private (private.). |
Zmienne błędów
Te zmienne są ustawiane po wystąpieniu błędu działania. Aby dowiedzieć się więcej, Więcej informacji znajdziesz w sekcji 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 tabeli Błędy czasu działania powyżej. Nazwa błędu jest ostatnia który jest częścią kodu błędu. | fault.name Matches "UnresolvedVariable" |
hmac.policy_name.failed |
Zasada ustawia tę zmienną w przypadku niepowodzenia. | hmac.HMAC-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="HMAC Policy Errors">
<Step>
<Name>AM-Unauthorized</Name>
<Condition>(fault.name Matches "HmacVerificationFailed")</Condition>
</Step>
<Condition>hmac.HMAC-1.failed = true</Condition>
</FaultRule>
</FaultRules>