Вы просматриваете документацию 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 налагает дополнительные ограничения, такие как автоматическое удаление символов, не являющихся буквенно-цифровыми. При необходимости используйте элемент | Н/Д | Необходимый |
продолжитьOnError | Установите значение false , чтобы возвращать ошибку в случае сбоя политики. Это ожидаемое поведение для большинства политик. Установите значение | ЛОЖЬ | Необязательный |
включено | Установите значение true , чтобы обеспечить соблюдение политики. Установите значение | истинный | Необязательный |
асинхронный | Этот атрибут устарел. | ЛОЖЬ | Устарело |
<Алгоритм>
<Algorithm>algorithm-name</Algorithm>
Указывает алгоритм хеширования для вычисления HMAC.
По умолчанию | Н/Д |
Присутствие | Необходимый |
Тип | Нить |
Допустимые значения | SHA-1 , SHA-224 , SHA-256 , SHA-384 , SHA-512 и MD-5 Конфигурация политики принимает имена алгоритмов без различия регистра, а также с дефисом между буквами и цифрами или без него. Например, |
<ОтображаемоеИмя>
<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 со значением в кодировке Base64. |
Тип | Нить |
Допустимые значения | Для кодирования: Значения нечувствительны к регистру; Текстовое значение элемента |
<Секретный ключ>
<SecretKey encoding='encoding_name' ref='private.secretkey'/>
Указывает секретный ключ, используемый для вычисления HMAC. Ключ получается из указанной переменной и декодируется в соответствии с конкретной кодировкой.
По умолчанию | Для указанной переменной не существует значения по умолчанию; атрибут При отсутствии атрибута |
Присутствие | Необходимый |
Тип | Нить |
Допустимые значения | Для Использование атрибута кодировки позволяет указать ключ, включающий байты, выходящие за пределы диапазона печатных символов UTF-8. Например, предположим, что конфигурация политики включает следующее: <SecretKey encoding='hex' ref='private.encodedsecretkey'/> Предположим, что В этом случае ключевые байты будут декодированы как: [53 65 63 72 65 74 31 32 33] (каждый байт представлен в шестнадцатеричном формате). Другой пример: если |
<VerificationValue>
<VerificationValue encoding='encoding_name' ref='variable_name'/> or <VerificationValue encoding='encoding_name'>string_value</VerificationValue>
(Необязательно) Указывает проверочное значение, а также алгоритм кодирования, который использовался для кодирования проверочного значения. Политика будет использовать этот алгоритм для декодирования значения.
По умолчанию | Не существует значения проверки по умолчанию. Если элемент присутствует, но атрибут encoding отсутствует, политика использует кодировку по умолчанию base64 |
Присутствие | Необязательный |
Тип | Нить |
Допустимые значения | Допустимые значения атрибута кодировки: Кодировка |
<Игнорировать неразрешенные переменные>
<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>