Вы просматриваете документацию Apigee Edge .
Перейдите в документацию Apigee X.info
Что
Позволяет использовать облегченную базовую аутентификацию для обеспечения безопасности на последнем этапе. Политика принимает имя пользователя и пароль, кодирует их в 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 кодирует имя пользователя и пароль, хранящиеся в переменных.
- Decode : Декодирует имя пользователя и пароль из строки, закодированной в 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>
| По умолчанию | Н/Д Если вы опустите этот элемент, будет использовано значение атрибута |
|---|---|
| Присутствие | Необязательный |
| Тип | Нить |
Элемент <Операция>
Определяет, будет ли политика кодировать или декодировать учетные данные в формате Base64.
<Operation>Encode</Operation>
| По умолчанию: | Н/Д |
| Присутствие: | Необходимый |
| Тип: | Нить. Допустимые значения включают:
|
элемент <IgnoreUnresolvedVariables>
Если установить значение true , политика не будет выдавать ошибку, если переменная не может быть разрешена. При использовании в контексте политики BasicAuthentication этот параметр обычно устанавливается в false поскольку, как правило, выгодно выдавать ошибку, если имя пользователя или пароль не найдены в указанных переменных.
<IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
| По умолчанию: | истинный |
| Присутствие: | Необязательный |
| Тип: | Логический |
элемент <Пользователь>
- Для кодирования используйте элемент
<User>, чтобы указать переменную, содержащую имя пользователя. Значения имени пользователя и пароля объединяются с помощью двоеточия перед кодированием Base64. - Для декодирования укажите переменную, в которую записано декодированное имя пользователя.
<User ref="credentials.username" />
| По умолчанию: | Н/Д |
| Присутствие: | Необходимый |
| Тип: | Н/Д |
Атрибуты
| Атрибут | Описание | По умолчанию | Присутствие |
|---|---|---|---|
| ссылка | Переменная, из которой политика динамически считывает имя пользователя (кодирует) или записывает имя пользователя (декодирует). | Н/Д | Необходимый |
<Пароль> элемент
- Для кодировки используйте элемент
<Password>, чтобы указать переменную, содержащую пароль. - Для декодирования укажите переменную, в которую будет записан декодированный пароль.
<Password ref="credentials.password" />
| По умолчанию: | Н/Д |
| Присутствие: | Необходимый |
| Тип: | Н/Д |
Атрибуты
| Атрибут | Описание | По умолчанию | Присутствие |
|---|---|---|---|
| ссылка | Переменная, из которой политика динамически считывает пароль (кодирует) или записывает пароль (декодирует). | Н/Д | Необходимый |
элемент <AssignTo>
Для операции Encode указывается целевая переменная, которой будет присвоено закодированное значение, сгенерированное данной политикой.
Следующий пример показывает, что политика должна установить заголовок Authorization сообщения в сгенерированное значение:
<AssignTo createNew="false">request.header.Authorization</AssignTo>
| По умолчанию: | Н/Д |
| Присутствие: | Необходимо для операции Encode . |
| Тип: | Нить |
Атрибуты
| Атрибут | Описание | По умолчанию | Присутствие |
|---|---|---|---|
| создатьНовый | Определяет, следует ли политике перезаписывать переменную, если она уже установлена. Если значение равно "false", присваивание значения переменной происходит только в том случае, если переменная в данный момент не задана (равна null). Если значение равно "true", присваивание значения переменной всегда происходит. Обычно этому атрибуту присваивается значение "false" (по умолчанию). | ЛОЖЬ | Необязательный |
<Исходный> элемент
Для декодирования используется переменная, содержащая закодированную в Base64 строку, в формате Basic Base64EncodedString . Например, укажите request.header.Authorization , соответствующую заголовку Authorization .
<Source>request.header.Authorization</Source>
| По умолчанию: | Н/Д |
| Присутствие: | Необходимо для операции декодирования. |
| Тип: | Н/Д |
Переменные потока
При сбое политики устанавливается следующая переменная потока:
-
BasicAuthentication.{policy_name}.failed(with a value 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>