Политика HMAC

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

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

Чтобы узнать больше о HMAC, см. HMAC: Keyed-Hashing for Message Authentication (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 UI другое имя на естественном языке.

Н/Д Необходимый
continueOnError Установите значение 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>

<DisplayName>Policy Display Name</DisplayName>

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

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

<Сообщение>

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

Значение по умолчанию для атрибута encodingbase64 .

Присутствие Необязательный элемент. Если этот элемент отсутствует, политика устанавливает переменную потока 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 , это приведет к тому же набору байтов для ключа. Без атрибута encoding или с атрибутом encoding UTF8 строковое значение Secret123 приведет к тому же набору байтов.

<Значение проверки>

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

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

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

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

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

<IgnoreUnresolvedVariables>

<IgnoreUnresolvedVariables>true|false</IgnoreUnresolvedVariables>

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

Логическая переменная 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>