Политика HMAC

Вы просматриваете документацию Apigee Edge .
Перейдите к документации Apigee X.
информация

Вычисляет и проверяет код аутентификации сообщения на основе хэша (HMAC). HMAC, иногда известный как код аутентификации сообщения с ключом или хэш с ключом, использует криптографическую хэш-функцию, такую ​​как SHA-1, SHA-224, SHA-256, SHA-384, SHA-512 или MD-5, применяемую к «сообщению». с секретным ключом для создания подписи или кода аутентификации сообщения в этом сообщении. Термин «сообщение» здесь относится к любому потоку байтов. Отправитель сообщения также может отправить HMAC получателю, а получатель может использовать HMAC для аутентификации сообщения.

Дополнительные сведения о HMAC см. в разделе HMAC: хеширование ключей для аутентификации сообщений (rfc2104) .

Образцы

Создать 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>

Проверьте 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>

Вычисление подписи и проверка этой подписи выполняются по одному и тому же процессу. Политика HMAC вычисляет HMAC и может дополнительно проверять вычисленную подпись на соответствие ожидаемому значению. Необязательный элемент VerificationValue (если присутствует) предписывает политике проверять вычисленное значение на соответствие известному или заданному значению.


Справочник элементов для HMAC

Справочник по политике описывает элементы и атрибуты политики HMAC.

Атрибуты, которые применяются к элементу верхнего уровня

<HMAC name="HMAC" continueOnError="false" enabled="true" async="false">

Следующие атрибуты являются общими для всех родительских элементов политики.

Атрибут Описание По умолчанию Присутствие
имя Внутреннее имя политики. В имени можно использовать следующие символы: A-Z0-9._\-$ % . Однако пользовательский интерфейс Apigee налагает дополнительные ограничения, такие как автоматическое удаление символов, не являющихся буквенно-цифровыми.

При необходимости используйте элемент <displayname></displayname> , чтобы пометить политику в редакторе прокси-сервера пользовательского интерфейса Apigee другим именем на естественном языке.

Н/Д Необходимый
продолжитьOnError Установите значение false , чтобы возвращать ошибку в случае сбоя политики. Это ожидаемое поведение для большинства политик.

Установите значение true , чтобы выполнение потока продолжалось даже после сбоя политики.

ЛОЖЬ Необязательный
включено Установите значение true , чтобы обеспечить соблюдение политики.

Установите значение false , чтобы «отключить» политику. Политика не будет применена, даже если она останется привязанной к потоку.

истинный Необязательный
асинхронный Этот атрибут устарел. ЛОЖЬ Устарело

<Алгоритм>

<Algorithm>algorithm-name</Algorithm>

Указывает алгоритм хеширования для вычисления HMAC.

По умолчанию Н/Д
Присутствие Необходимый
Тип Нить
Допустимые значения SHA-1 , SHA-224 , SHA-256 , SHA-384 , SHA-512 и MD-5

Конфигурация политики принимает имена алгоритмов без различия регистра, а также с дефисом между буквами и цифрами или без него. Например, SHA256 , SHA-256 и sha256 эквивалентны.

<ОтображаемоеИмя>

<DisplayName>Policy Display Name</DisplayName>

Используйте в дополнение к атрибуту name, чтобы пометить политику в редакторе прокси-сервера Apigee UI другим именем на естественном языке.

По умолчанию Если вы опустите этот элемент, будет использовано значение атрибута имени политики.
Присутствие Необязательный
Тип Нить

<Сообщение>

<Message>message_template_here</Message>
or
<Message ref='variable_here'/>

Указывает полезные данные сообщения для подписи. Входные данные этого элемента поддерживают шаблоны сообщений (подстановку переменных), что позволяет включать дополнительные элементы во время выполнения, такие как метки времени, одноразовые номера, списки заголовков или другую информацию. Например:

<Message>Fixed Part
    {a_variable}
    {timeFormatUTCMs(timeFormatString1,system.timestamp)}
    {nonce}
</Message>

Шаблон сообщения может включать фиксированные и переменные части, включая символы новой строки и статические функции. Пробелы имеют большое значение.

По умолчанию Н/Д
Присутствие Необходимый
Тип Нить
Допустимые значения Любая строка действительна для текстового значения. Если вы предоставите атрибут ref , он будет иметь приоритет над текстовым значением. Политика оценивает либо текстовое значение, либо ссылочную переменную как шаблон сообщения.

<Вывод>

<Output encoding='encoding_name'>variable_name</Output>

Указывает имя переменной, которую политика должна установить с вычисленным значением HMAC. Также указывает кодировку, которая будет использоваться для вывода.

По умолчанию

Выходная переменная по умолчанию — hmac.POLICYNAME.output .

Значением по умолчанию для атрибута encoding является base64 .

Присутствие Необязательный. Если этот элемент отсутствует, политика устанавливает переменную потока hmac.POLICYNAME.output со значением в кодировке Base64.
Тип Нить
Допустимые значения

Для кодирования: hex , base16 , base64 , base64url .

Значения нечувствительны к регистру; hex и base16 являются синонимами.

Текстовое значение элемента Output может быть любым допустимым именем переменной потока.

<Секретный ключ>

<SecretKey encoding='encoding_name' ref='private.secretkey'/>

Указывает секретный ключ, используемый для вычисления HMAC. Ключ получается из указанной переменной и декодируется в соответствии с конкретной кодировкой.

По умолчанию

Для указанной переменной не существует значения по умолчанию; атрибут ref является обязательным.

При отсутствии атрибута encoding по умолчанию политика декодирует строку секретного ключа с помощью UTF-8 для получения байтов ключа.

Присутствие Необходимый
Тип Нить
Допустимые значения

Для encoding допустимыми значениями являются hex , base16 , base64 , utf8 . По умолчанию используется UTF8. Значения не чувствительны к регистру, а дефисы не имеют значения. Base16 — это то же самое, что base-16 и bAse16 . Base16 и Hex являются синонимами.

Использование атрибута кодировки позволяет указать ключ, включающий байты, выходящие за пределы диапазона печатных символов UTF-8. Например, предположим, что конфигурация политики включает следующее:

 <SecretKey encoding='hex' ref='private.encodedsecretkey'/>

Предположим, что private.encodedsecretkey содержит строку 536563726574313233 .

В этом случае ключевые байты будут декодированы как: [53 65 63 72 65 74 31 32 33] (каждый байт представлен в шестнадцатеричном формате). Другой пример: если encoding='base64' и private.encodedsecretkey содержит строку U2VjcmV0MTIz , это приведет к тому же набору байтов для ключа. Без атрибута кодировки или с атрибутом кодировки UTF8 строковое значение Secret123 приведет к тому же набору байтов.

<VerificationValue>

<VerificationValue encoding='encoding_name' ref='variable_name'/>
or
<VerificationValue encoding='encoding_name'>string_value</VerificationValue>

(Необязательно) Указывает проверочное значение, а также алгоритм кодирования, который использовался для кодирования проверочного значения. Политика будет использовать этот алгоритм для декодирования значения.

По умолчанию Не существует значения проверки по умолчанию. Если элемент присутствует, но атрибут encoding отсутствует, политика использует кодировку по умолчанию base64
Присутствие Необязательный
Тип Нить
Допустимые значения

Допустимые значения атрибута кодировки: hex , base16 , base64 , base64url . Значения нечувствительны к регистру; hex и base16 являются синонимами.

Кодировка VerificationValue не обязательно должна совпадать с кодировкой, используемой для элемента Output .

<Игнорировать неразрешенные переменные>

<IgnoreUnresolvedVariables>true|false</IgnoreUnresolvedVariables>

Установите значение false если вы хотите, чтобы политика выдавала ошибку, когда любая ссылочная переменная, указанная в политике, неразрешима. Установите значение true , чтобы рассматривать любую неразрешимую переменную как пустую строку (ноль).

Логическое значение IgnoreUnresolvedVariables влияет только на те переменные, на которые ссылается шаблон сообщения. Хотя SecretKey и VerificationValue могут ссылаться на переменную, оба они должны быть разрешимыми, поэтому параметр ignore к ним не применяется.

По умолчанию ЛОЖЬ
Присутствие Необязательный
Тип логическое значение
Допустимые значения правда или ложь

Переменные потока

Политика может устанавливать эти переменные во время выполнения.

Переменная Описание Пример
hmac. policy_name .message Политика устанавливает в этой переменной эффективное сообщение — результат оценки шаблона сообщения, указанного в элементе Message . hmac.HMAC-Policy.message = "Hello, World"
hmac. policy_name .output Получает результат вычисления HMAC, если элемент Output не указывает имя переменной. hmac.HMAC-Policy.output = /yyRjydfP+fBHTwXFgc5AZhLAg2kwCri+e35girrGw4=
hmac. policy_name .outputencoding Получает имя выходной кодировки. hmac.HMAC-Policy.outputencoding = base64

Ссылка на ошибку

В этом разделе описаны коды ошибок и сообщения об ошибках, которые возвращаются, а также переменные ошибок, которые устанавливаются Apigee, когда эта политика вызывает ошибку. Эту информацию важно знать, если вы разрабатываете правила обработки ошибок. Дополнительные сведения см. в разделах Что нужно знать об ошибках политики и Обработка ошибок .

Ошибки выполнения

Эти ошибки могут возникать при выполнении политики.

Код неисправности Статус HTTP Происходит, когда
steps.hmac.UnresolvedVariable 401

Эта ошибка возникает, если переменная, указанная в политике HMAC:

  • Вне области действия (недоступно в конкретном потоке, в котором выполняется политика)

    или

  • Не может быть решено (не определено)
steps.hmac.HmacVerificationFailed 401 Проверка HMAC не удалась; предоставленное проверочное значение не соответствует расчетному значению.
steps.hmac.HmacCalculationFailed 401 Политике не удалось вычислить HMAC.
steps.hmac.EmptySecretKey 401 Значение переменной секретного ключа пусто.
steps.hmac.EmptyVerificationValue 401 Переменная, содержащая проверочное значение, пуста.

Ошибки развертывания

Эти ошибки могут возникнуть при развертывании прокси-сервера, содержащего эту политику.

Название ошибки Статус HTTP Происходит, когда
steps.hmac.MissingConfigurationElement 401 Эта ошибка возникает, когда необходимый элемент или атрибут отсутствует.
steps.hmac.InvalidValueForElement 401 Эта ошибка возникает, если значение, указанное в элементе Algorithm, не является одним из следующих значений: SHA-1 , SHA-224 , SHA-256 , SHA-512 или MD-5 .
steps.hmac.InvalidSecretInConfig 401 Эта ошибка возникает, если для SecretKey явно указано текстовое значение.
steps.hmac.InvalidVariableName 401 Эта ошибка возникает, если переменная SecretKey не содержит private префикса ( private. ).

Переменные неисправности

Эти переменные устанавливаются при возникновении ошибки во время выполнения. Дополнительные сведения см. в разделе Что нужно знать об ошибках политики .

Переменные Где Пример
fault.name=" fault_name " fault_name — это имя ошибки, как указано в таблице ошибок времени выполнения выше. Имя неисправности — это последняя часть кода неисправности. fault.name Matches "UnresolvedVariable"
hmac. policy_name .failed Политика устанавливает эту переменную в случае сбоя. hmac.HMAC-Policy.failed = true

Пример ответа об ошибке

Для обработки ошибок лучше всего перехватывать часть errorcode в ответе на ошибку. Не полагайтесь на текст в faultstring , поскольку он может измениться.

Пример правила неисправности

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