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

Что
Позволяет использовать упрощенную базовую аутентификацию для обеспечения безопасности на последней миле. Политика принимает имя пользователя и пароль, кодирует их Base64 и записывает полученное значение в переменную. Результирующее значение имеет форму Basic Base64EncodedString
. Обычно вы записываете это значение в заголовок HTTP, например заголовок авторизации .
Политика также позволяет декодировать учетные данные, хранящиеся в строке в кодировке Base64, в имя пользователя и пароль.
Видео. В этом видеоролике показано, как закодировать имя пользователя и пароль в формате Base64 с помощью политики базовой аутентификации.
Видео. В этом видеоролике показано, как декодировать имя пользователя и пароль в кодировке Base64 с помощью политики базовой аутентификации.
Образцы
Исходящее кодирование
<BasicAuthentication name="ApplyBasicAuthHeader"> <DisplayName>ApplyBasicAuthHeader</DisplayName> <Operation>Encode</Operation> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <User ref="BasicAuth.credentials.username" /> <Password ref="BasicAuth.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="request.queryparam.username" /> <Password ref="request.queryparam.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="request.queryparam.username" />
По умолчанию: | Н/Д |
Присутствие: | Необходимый |
Тип: | Н/Д |
Атрибуты
Атрибут | Описание | По умолчанию | Присутствие |
---|---|---|---|
ссылка | Переменная, из которой политика динамически считывает имя пользователя (кодирует) или записывает имя пользователя (декодирует). | Н/Д | Необходимый |
Элемент <Пароль>
- Для кодирования используйте элемент
<Password>
, чтобы указать переменную, содержащую пароль. - Для декодирования укажите переменную, куда записывается расшифрованный пароль.
<Password ref="request.queryparam.password" />
По умолчанию: | Н/Д |
Присутствие: | Необходимый |
Тип: | Н/Д |
Атрибуты
Атрибут | Описание | По умолчанию | Присутствие |
---|---|---|---|
ссылка | Переменная, из которой политика динамически считывает пароль (кодирует) или записывает пароль (декодирует). | Н/Д | Необходимый |
Элемент <AssignTo>
Указывает целевую переменную, для которой необходимо задать закодированное или декодированное значение, созданное этой политикой.
В следующем примере показано, что политика должна установить для заголовка Authorization
сообщения сгенерированное значение:
<AssignTo createNew="false">request.header.Authorization</AssignTo>
По умолчанию: | Н/Д |
Присутствие: | Необходимый |
Тип: | Нить |
Атрибуты
Атрибут | Описание | По умолчанию | Присутствие |
---|---|---|---|
создатьновый | Определяет, должна ли политика перезаписывать переменную, если переменная уже установлена. Если установлено значение «false», присвоение переменной происходит только в том случае, если переменная в данный момент не установлена (нуль). Если установлено значение «истина», всегда происходит присвоение переменной. Обычно для этого атрибута устанавливается значение «false» (по умолчанию). | ЛОЖЬ | Необязательный |
Элемент <Источник>
Для декодирования используется переменная, содержащая строку в кодировке Base64 в форме Basic
Base64EncodedString
. Например, укажите request.header.Authorization
, соответствующий заголовку авторизации .
<Source>request.header.Authorization</Source>
По умолчанию: | Н/Д |
Присутствие: | Требуется для операции декодирования. |
Тип: | Н/Д |
Переменные потока
Следующая переменная потока устанавливается в случае сбоя политики:
-
BasicAuthentication.{policy_name}.failed
(со значением true)
Ссылка на ошибку
This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error. This information is important to know if you are developing fault rules to handle errors. To learn more, see What you need to know about policy errors and Handling faults.
Runtime errors
These errors can occur when the policy executes.
Fault code | HTTP status | Cause | Fix |
---|---|---|---|
steps.basicauthentication.InvalidBasicAuthenticationSource |
500 | On a decode when the incoming Base64 encoded string does not contain a valid value or the header is malformed (e.g., does not start with "Basic"). | build |
steps.basicauthentication.UnresolvedVariable |
500 | The required source variables for the decode or encode are not present. This error can
only occur if IgnoreUnresolvedVariables is false. |
build |
Deployment errors
These errors can occur when you deploy a proxy containing this policy.
Error name | Occurs when | Fix |
---|---|---|
UserNameRequired |
The <User> element must be present for the named operation. |
build |
PasswordRequired |
The <Password> element must be present for the named operation. |
build |
AssignToRequired |
The <AssignTo> element must be present for the named operation. |
build |
SourceRequired |
The <Source> element must be present for the named operation. |
build |
Fault variables
These variables are set when a runtime error occurs. For more information, see What you need to know about policy errors.
Variables | Where | Example |
---|---|---|
fault.name="fault_name" |
fault_name is the name of the fault, as listed in the Runtime errors table above. The fault name is the last part of the fault code. | fault.name Matches "UnresolvedVariable" |
BasicAuthentication.policy_name.failed |
policy_name is the user-specified name of the policy that threw the fault. | BasicAuthentication.BA-Authenticate.failed = true |
Example error response
{ "fault":{ "detail":{ "errorcode":"steps.basicauthentication.UnresolvedVariable" }, "faultstring":"Unresolved variable : request.queryparam.password" } }
Example fault rule
<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>