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 |
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>