Вы просматриваете документацию 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)
Ссылка на ошибку
В этом разделе описаны коды ошибок и сообщения об ошибках, которые возвращаются, а также переменные ошибок, которые устанавливаются 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>