Przeglądasz dokumentację Apigee Edge.
Przejdź do
Dokumentacja Apigee X. informacje.

Przetwarza i weryfikuje kod uwierzytelniania wiadomości oparty na haszach (HMAC). Czasami znany jako kod uwierzytelniania wiadomości z kluczem lub hasz z kluczem, HMAC stosuje hasz kryptograficzny. funkcja, na przykład SHA-1, SHA-224, SHA-256, SHA-384, SHA-512 lub MD-5, zastosowana do „wiadomości”, wraz z tajnym kluczem, w celu wygenerowania podpisu lub kodu uwierzytelniającego dla tej wiadomości. Termin „wiadomość” tutaj odnosi się do dowolnego strumienia bajtów. Nadawca wiadomości może też wysłać kod HMAC do odbiorcy, a odbiorca może użyć HMAC do uwierzytelnienia wiadomości.
Aby dowiedzieć się więcej o HMAC, Więcej informacji: HMAC: Keyed-Hashing do uwierzytelniania wiadomości (rfc2104).
Przykłady
Wygeneruj 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>
Zweryfikuj 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>
Sposób zbierania podpisu i weryfikacji podpisu przebiega w ten sam sposób. proces tworzenia konta. Zasada HMAC oblicza kod HMAC i opcjonalnie może zweryfikować podpisu z oczekiwaną wartością. Opcjonalny element VerificationValue (jeśli występuje) kieruje zasadą do sprawdzenia obliczonej wartości w porównaniu ze znanym lub podanym .
Odniesienie do elementów HMAC
Opis zasad HMAC zawiera opis ich elementów i atrybutów.
Atrybuty, które zastosuj do elementu najwyższego poziomu
<HMAC name="HMAC" 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 Apigee 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 |
<Algorithm>
<Algorithm>algorithm-name</Algorithm>
Określa algorytm szyfrowania do obliczania HMAC.
Domyślnie | 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 zasad akceptuje nazwy algorytmów bez rozróżniania wielkości liter.
z łącznikiem między literami i cyframi lub bez niego . Na przykład: |
<DisplayName>
<DisplayName>Policy Display Name</DisplayName>
Użyj oprócz atrybutu name [nazwa], aby oznaczyć zasadę etykietą w edytorze serwera proxy interfejsu Apigee 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 |
<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 (zastąpienie zmiennej), aby umożliwić uwzględnienie w czasie działania dodatkowych elementów, takich jak sygnatury czasowe, liczby jednorazowe, listy nagłówki i 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 znaki nowego wiersza i funkcje statyczne. Odstępy są istotne.
Domyślnie | Nie dotyczy |
Obecność | Wymagane |
Typ | Ciąg znaków |
Prawidłowe wartości | Dowolny ciąg znaków jest prawidłowy dla wartości tekstowej. Jeśli podasz atrybut ref ,
ma pierwszeństwo przed wartością tekstową. Zasada ocenia tekst
lub wskazaną zmienną jako szablon wiadomości. |
<Output>
<Output encoding='encoding_name'>variable_name</Output>
Określa nazwę zmiennej, którą zasada powinna ustawić z obliczoną wartością HMAC. Określa też kodowanie danych wyjściowych.
Domyślnie |
Domyślna zmienna wyjściowa to Domyślną wartością atrybutu |
Obecność | Opcjonalnie: Jeśli ten element nie jest podany, zasada ustawia zmienną przepływu
hmac.POLICYNAME.output z wartością zakodowaną w formacie base64. |
Typ | Ciąg znaków |
Prawidłowe wartości | Do kodowania, Wielkość liter w wartościach nie jest rozróżniana. Wartość tekstowa elementu |
<SecretKey>
<SecretKey encoding='encoding_name' ref='private.secretkey'/>
Określa tajny klucz używany do obliczania HMAC. Klucz jest pobierany z wskazanej instancji która jest dekodowana zgodnie z określonym kodowaniem.
Domyślnie |
Brak wartości domyślnej dla wskazanej zmiennej.
atrybut W przypadku braku atrybutu |
Obecność | Wymagane |
Typ | Ciąg znaków |
Prawidłowe wartości | W przypadku funkcji Za pomocą atrybutu kodowania można określić klucz, który obejmuje bajty spoza zakresu znaków UTF-8 do wydrukowania. Załóżmy, że konfiguracja zasady zawiera te elementy: <SecretKey encoding='hex' ref='private.encodedsecretkey'/>
Załóżmy, że
W tym przypadku bajty klucza zostaną zdekodowane w następujący sposób: [53 65 63 72 65 74 31 32 33].
(każdy bajt jest reprezentowany w postaci szesnastkowej). Innym przykładem może być |
<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 używane do zakodowania wartości weryfikacyjnej. Zasada będzie używać tego algorytmu do dekodowania wartości.
Domyślnie | Brak domyślnej wartości weryfikacji. Jeśli element jest obecny, ale tag
Brakuje atrybutu encoding . Zasada używa domyślnego kodowania: base64 |
Obecność | Opcjonalnie |
Typ | Ciąg znaków |
Prawidłowe wartości |
Prawidłowe wartości atrybutu kodowania to: Kodowanie elementu |
<IgnoreUnresolvedVariables>
<IgnoreUnresolvedVariables>true|false</IgnoreUnresolvedVariables>
Ustaw wartość false
, jeśli zasada ma generować błąd, gdy określona zmienna jest wskazana.
jest nierozstrzygnięta. Ustaw jako true
, aby traktować każdą zmienną, której nie można rozstrzygnąć jako pusty ciąg znaków
(null).
Wartość logiczna IgnorujUnresolvedZmiennes wpływa tylko na zmienne, do których odwołuje się funkcja
szablon wiadomości. Chociaż metody SecretKey
i VerificationValue
mogą odwoływać się do zmiennej, zarówno
z nich muszą być możliwe do rozwiązania, więc ustawienie ignore
nie ma do nich zastosowania.
Domyślnie | Fałsz |
Obecność | Opcjonalnie |
Typ | Wartość logiczna |
Prawidłowe wartości | prawda lub fałsz |
Zmienne przepływu
Zasada może ustawiać te zmienne podczas wykonywania.
Zmienna | Opis | Przykład |
---|---|---|
hmac.policy_name.message |
Zasada ustawia tę zmienną z odpowiednim komunikatem,
wyniku oceny szablonu wiadomości określonego w tabeli Message
. |
hmac.HMAC-Policy.message = "Hello, World" |
hmac.policy_name.output |
Pobiera wynik funkcji
obliczenia HMAC, gdy element Output
nie określaj nazwy zmiennej. |
hmac.HMAC-Policy.output = /yyRjydfP+fBHTwXFgc5AZhLAg2kwCri+e35girrGw4= |
hmac.policy_name.outputencoding |
Pobiera nazwę kodowania wyjściowego. | hmac.HMAC-Policy.outputencoding = base64 |
Error reference
This section describes the fault codes and error messages that are returned and fault variables that are set by Apigee when this policy triggers an error. This information is important to know if you are developing fault rules to handle faults. To learn more, see What you need to know about policy errors and Handling faults.
Runtime errors
These errors can occur when the policy executes.
Fault code | HTTP status | Occurs when |
---|---|---|
steps.hmac.UnresolvedVariable |
401 | This error occurs if a variable specified in the HMAC policy is either:
|
steps.hmac.HmacVerificationFailed |
401 | The HMAC verification failed; the verification value provided does not match the calculated value. |
steps.hmac.HmacCalculationFailed |
401 | The policy was unable to calculate the HMAC. |
steps.hmac.EmptySecretKey |
401 | The value of the secret key variable is empty. |
steps.hmac.EmptyVerificationValue |
401 | The variable holding the verification value is empty. |
Deployment errors
These errors can occur when you deploy a proxy containing this policy.
Error name | HTTP status | Occurs when |
---|---|---|
steps.hmac.MissingConfigurationElement |
401 | This error occurs when a required element or attribute is missing. |
steps.hmac.InvalidValueForElement |
401 | This error occurs if the value specified in the Algorithm element is not
one of the following values: SHA-1 , SHA-224 , SHA-256 ,
SHA-512 , or MD-5 . |
steps.hmac.InvalidSecretInConfig |
401 | This error occurs if there is a text value explicitly provided for SecretKey . |
steps.hmac.InvalidVariableName |
401 | This error occurs if the SecretKey variable does not contain the
private prefix (private. ). |
Fault variables
These variables are set when a runtime error occurs. For more information, see What you need to know about policy errors.
Variables | Where | Example |
---|---|---|
fault.name="fault_name" |
fault_name is the name of the fault, as listed in the Runtime errors table above. The fault name is the last part of the fault code. | fault.name Matches "UnresolvedVariable" |
hmac.policy_name.failed |
The policy sets this variable in the case of a failure. | hmac.HMAC-Policy.failed = true |
Example error response
For error handling, the best practice is to trap the errorcode
part of the error
response. Do not rely on the text in the faultstring
, because it could change.
Example fault rule
<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>