Вы просматриваете документацию по Apigee Edge.
Перейдите к документации по Apigee X. Информация
Что
Позволяет использовать базовую аутентификацию для обеспечения безопасности на последнем этапе. Правило принимает имя пользователя и пароль, кодирует их в Base64 и записывает полученное значение в переменную. Полученное значение имеет формат Basic
Base64EncodedString. Обычно это значение записывается в заголовок HTTP, например в заголовок Authorization.
Правила также позволяют декодировать учетные данные, хранящиеся в строке, закодированной в Base64, в имя пользователя и пароль.
Видео. В этом видео показано, как закодировать имя пользователя и пароль в формате Base64 с помощью правила "Базовая аутентификация".
Видео. В этом видео показано, как декодировать имя пользователя и пароль, закодированные в формате Base64, с помощью правила базовой аутентификации.
Примеры
Исходящее кодирование
<BasicAuthentication name="ApplyBasicAuthHeader"> <DisplayName>ApplyBasicAuthHeader</DisplayName> <Operation>Encode</Operation> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <User ref="credentials.username" /> <Password ref="credentials.password" /> <AssignTo createNew="false">request.header.Authorization</AssignTo> </BasicAuthentication>
В приведенном выше примере конфигурации правила имя пользователя и пароль, которые нужно закодировать, берутся из переменных, указанных в атрибутах ref элементов <User> и <Password>. Переменные должны быть заданы до выполнения этого правила. Обычно переменные заполняются значениями, которые считываются из карты "ключ-значение". Ознакомьтесь с правилами в отношении операций с картами пар "ключ-значение".
В результате этой конфигурации в исходящее сообщение запроса, отправляемое на сервер, будет добавлен HTTP-заголовок Authorization, как указано в элементе <AssignTo>:
Authorization: Basic TXlVc2VybmFtZTpNeVBhc3N3b3Jk
Значения <User> и <Password> объединяются с помощью двоеточия перед кодированием в Base64.
Предположим, у вас есть карта "ключ-значение" со следующей записью:
{
"encrypted" : true,
"entry" : [ {
"name" : "username",
"value" : "MyUsername"
}, {
"name" : "password",
"value" : "MyPassword"
} ],
"name" : "BasicAuthCredentials"
}
Прикрепите следующие правила KeyValueMapOperations до правила BasicAuthentication, чтобы извлекать значения для элементов <User> и <Password> из хранилища пар "ключ-значение" и заполнять ими переменные credentials.username и credentials.password.
<KeyValueMapOperations name="getCredentials" mapIdentifier="BasicAuthCredentials"> <Scope>apiproxy</Scope> <Get assignTo="credentials.username" index='1'> <Key> <Parameter>username</Parameter> </Key> </Get> <Get assignTo="credentials.password" index='1'> <Key> <Parameter>password</Parameter> </Key> </Get> </KeyValueMapOperations>
Декодирование входящего трафика
<BasicAuthentication name="DecodeBaseAuthHeaders"> <DisplayName>Decode Basic Authentication Header</DisplayName> <Operation>Decode</Operation> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <User ref="request.header.username" /> <Password ref="request.header.password" /> <Source>request.header.Authorization</Source> </BasicAuthentication>
В этом примере правила имя пользователя и пароль декодируются из HTTP-заголовка Authorization, как указано в элементе <Source>. Строка в кодировке Base64 должна иметь формат Basic Base64EncodedString..
Правило записывает декодированное имя пользователя в переменную request.header.username, а декодированный пароль – в переменную request.header.password.
Правила в отношении базовой аутентификации
Правило имеет два режима работы:
- Кодирование. Имя пользователя и пароль, хранящиеся в переменных, кодируются в формате Base64.
- Декодировать. Декодирует имя пользователя и пароль из строки в кодировке Base64.
Имя пользователя и пароль обычно хранятся в хранилище пар "ключ-значение", а затем считываются из него во время выполнения. Подробнее о том, как использовать хранилище пар "ключ-значение", можно узнать из статьи Правила для операций с картой пар "ключ-значение".
Сведения об элементах
В справочнике по элементам описаны элементы и атрибуты правила BasicAuthentication.
<BasicAuthentication async="false" continueOnError="false" enabled="true" name="Basic-Authentication-1"> <DisplayName>Basic Authentication 1</DisplayName> <Operation>Encode</Operation> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <User ref="credentials.username" /> <Password ref="credentials.password" /> <AssignTo createNew="false">request.header.Authorization</AssignTo> <Source>request.header.Authorization</Source> </BasicAuthentication>
Атрибуты <BasicAuthentication>
<BasicAuthentication async="false" continueOnError="false" enabled="true" name="Basic-Authentication-1">
В следующей таблице описаны атрибуты, общие для всех родительских элементов политики:
| Атрибут | Описание | По умолчанию | Присутствие |
|---|---|---|---|
name | Внутреннее имя политики. Значение атрибута При необходимости используйте элемент | Н/Д | Необходимый |
continueOnError | Установите значение Установите значение | ЛОЖЬ | Необязательный |
enabled | Установите значение Установите значение | истинный | Необязательный |
async | Этот атрибут устарел. | ЛОЖЬ | Устарело |
Элемент <DisplayName>
Используйте в дополнение к атрибуту name , чтобы пометить политику в редакторе прокси-сервера пользовательского интерфейса управления другим именем на естественном языке.
<DisplayName>Policy Display Name</DisplayName>
| По умолчанию | Н/Д Если вы опустите этот элемент, будет использовано значение атрибута |
|---|---|
| Присутствие | Необязательный |
| Тип | Нить |
Элемент <Operation>
Определяет, кодирует или декодирует ли правило учетные данные в формате Base64.
<Operation>Encode</Operation>
| По умолчанию: | Н/Д |
| Присутствие | Обязательно |
| Тип: |
Строка. Действительные значения:
|
Элемент <IgnoreUnresolvedVariables>
Если задано значение true, правило не будет выдавать ошибку, если не удастся разрешить переменную. Если этот параметр используется в контексте правила BasicAuthentication, обычно задается значение false, поскольку в большинстве случаев полезно выводить ошибку, если имя пользователя или пароль не удается найти в указанных переменных.
<IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
| По умолчанию: | true |
| Присутствие | Необязательно |
| Тип: |
Логическое значение |
Элемент <User>
- Для кодирования используйте элемент
<User>, чтобы указать переменную, содержащую имя пользователя. Значения имени пользователя и пароля объединяются с помощью двоеточия перед кодированием в Base64. - Для декодирования укажите переменную, в которую будет записано декодированное имя пользователя.
<User ref="credentials.username" />
| По умолчанию: | Н/Д |
| Присутствие | Обязательно |
| Тип: |
Н/Д |
Атрибуты
| Атрибут | Описание | По умолчанию | Тип поля |
|---|---|---|---|
| ref |
Переменная, из которой правило динамически считывает имя пользователя (encode) или в которую записывает имя пользователя (decode). |
Н/Д | Обязательно |
Элемент <Password>
- Для кодирования используйте элемент
<Password>, чтобы указать переменную, содержащую пароль. - Для декодирования укажите переменную, в которую будет записан декодированный пароль.
<Password ref="credentials.password" />
| По умолчанию: | Н/Д |
| Присутствие | Обязательно |
| Тип: |
Н/Д |
Атрибуты
| Атрибут | Описание | По умолчанию | Тип поля |
|---|---|---|---|
| ref |
Переменная, из которой правило динамически считывает пароль (encode) или в которую записывает пароль (decode). |
Н/Д | Обязательно |
Элемент <AssignTo>
Для операции Encode указывает целевую переменную, в которую будет записано закодированное значение, сгенерированное этим правилом.
В примере ниже показано, что правило должно задать для заголовка Authorization сообщения сгенерированное значение:
<AssignTo createNew="false">request.header.Authorization</AssignTo>
| По умолчанию: | Н/Д |
| Присутствие | Требуется для операции Encode. |
| Тип: |
Строка |
Атрибуты
| Атрибут | Описание | По умолчанию | Тип поля |
|---|---|---|---|
| createNew | Определяет, должно ли правило перезаписывать переменную, если она уже задана.
Если значение равно false, присвоение переменной происходит только в том случае, если переменная в данный момент не задана (null). Если задано значение true, переменной всегда присваивается значение. Обычно для этого атрибута задается значение "false" (по умолчанию). |
false | Необязательно |
Элемент <Source>
Для декодирования – переменная, содержащая строку в кодировке Base64, в формате Basic Base64EncodedString. Например, укажите request.header.Authorization, соответствующий заголовку Authorization.
<Source>request.header.Authorization</Source>
| По умолчанию: | Н/Д |
| Присутствие | Требуется для операции декодирования. |
| Тип: |
Н/Д |
Переменные процесса
При сбое правила задается следующая переменная потока:
BasicAuthentication.{policy_name}.failed(со значением true)
Справочник по ошибкам
В этом разделе описаны коды ошибок и сообщения об ошибках, которые возвращаются, а также переменные ошибок, которые задаются Edge, когда это правило вызывает ошибку. Эта информация важна, если вы разрабатываете правила обработки ошибок. Подробнее о том, что нужно знать об ошибках в правилах и об обработке ошибок…
Ошибки времени выполнения
Эти ошибки могут возникать при выполнении правил.
| Код ошибки | Статус HTTP | Причина | Исправить |
|---|---|---|---|
steps.basicauthentication.InvalidBasicAuthenticationSource |
500 | При декодировании, если входящая строка в кодировке Base64 не содержит допустимого значения или заголовок имеет неправильный формат (например, не начинается с "Basic"). | build |
steps.basicauthentication.UnresolvedVariable |
500 | Не указаны необходимые исходные переменные для декодирования или кодирования. Эта ошибка может возникнуть, только если для параметра IgnoreUnresolvedVariables задано значение false. |
build |
Ошибки развертывания
Эти ошибки могут возникать при развертывании прокси-сервера, содержащего это правило.
| Название ошибки | Когда возникает | Исправить |
|---|---|---|
UserNameRequired |
Для именованной операции должен быть указан элемент <User>. |
build |
PasswordRequired |
Для именованной операции должен быть указан элемент <Password>. |
build |
AssignToRequired |
Для именованной операции должен быть указан элемент <AssignTo>. |
build |
SourceRequired |
Для именованной операции должен быть указан элемент <Source>. |
build |
Переменные ошибок
Эти переменные задаются при возникновении ошибки выполнения. Подробнее о нарушениях правил…
| Переменные | Место | Пример |
|---|---|---|
fault.name="fault_name" |
fault_name – название ошибки, указанное в таблице Ошибки выполнения выше. Название ошибки – это последняя часть кода ошибки. | fault.name Matches "UnresolvedVariable" |
BasicAuthentication.policy_name.failed |
policy_name – заданное пользователем название правила, которое вызвало ошибку. | BasicAuthentication.BA-Authenticate.failed = true |
Пример ответа об ошибке
{ "fault":{ "detail":{ "errorcode":"steps.basicauthentication.UnresolvedVariable" }, "faultstring":"Unresolved variable : request.queryparam.password" } }
Пример правила обработки ошибок
<FaultRule name="Basic Authentication Faults">
<Step>
<Name>AM-UnresolvedVariable</Name>
<Condition>(fault.name Matches "UnresolvedVariable") </Condition>
</Step>
<Step>
<Name>AM-AuthFailedResponse</Name>
<Condition>(fault.name = "InvalidBasicAuthenticationSource")</Condition>
</Step>
<Condition>(BasicAuthentication.BA-Authentication.failed = true) </Condition>
</FaultRule>