Zasada HMAC

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 <displayname></displayname> do: oznacz zasadę w edytorze serwera proxy interfejsu Apigee o innym języku naturalnym imię i nazwisko.

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 true, aby wykonywanie przepływu było kontynuowane nawet po zastosowaniu zasady niepowodzenie.

fałsz Opcjonalnie
włączone Aby egzekwować zasadę, ustaw wartość true.

Ustaw „Wyłącz” na: false zasady. Zasada nie zostanie wyegzekwowana nawet jeśli jest ono połączone z procesem.

prawda Opcjonalnie
asynchroniczny Ten atrybut został wycofany. fałsz Wycofano

&lt;Algorithm&gt;

<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: SHA256, SHA-256 i sha256 są równoważne.

&lt;DisplayName&gt;

<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

&lt;Message&gt;

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

&lt;Output&gt;

<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 hmac.POLICYNAME.output.

Domyślną wartością atrybutu encoding jest base64.

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, hex, base16, base64, base64url.

Wielkość liter w wartościach nie jest rozróżniana. hex i base16 to synonimy.

Wartość tekstowa elementu Output. może być dowolną prawidłową nazwą zmiennej przepływu.

&lt;SecretKey&gt;

<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 ref jest wymagany.

W przypadku braku atrybutu encoding domyślnie zasada dekoduje ciąg klucza obiektu tajnego za pomocą kodowania UTF-8, aby uzyskać bajty klucza.

Obecność Wymagane
Typ Ciąg znaków
Prawidłowe wartości

W przypadku funkcji encoding prawidłowe wartości to hex, base16, base64, utf8. Domyślne kodowanie to UTF8. Wielkość liter w wartościach nie jest rozróżniana, a myślniki nieistotne. Parametr Base16 jest taki sam jak base-16 oraz bAse16 Base16 i Hex to synonimy.

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 private.encodedsecretkey przechowuje ciąg 536563726574313233.

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ć encoding='base64', a private.encodedsecretkey zawiera ciąg U2VjcmV0MTIz, da to taki sam zestaw bajtów dla klucza. Bez atrybutu kodowania lub z atrybutem kodowania UTF8, wartość ciągu Secret123 zwróciłaby taki sam zestaw bajtów.

&lt;VerificationValue&gt;

<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: hex, base16, base64, base64url. Wartości wielkość liter nie jest rozróżniana; hex i base16 to synonimy.

Kodowanie elementu VerificationValue nie musi być takie samo jak używany w elemencie Output.

&lt;IgnoreUnresolvedVariables&gt;

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

  • Poza zakresem (niedostępne w konkretnym procesie, w którym jest wykonywana zasada)

    lub

  • Nie można rozwiązać (nie określono)
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>