Правила BasicAuthentication

Вы просматриваете документацию по 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

Внутреннее имя политики. Значение атрибута name может содержать буквы, цифры, пробелы, дефисы, подчеркивания и точки. Это значение не может превышать 255 символов.

При необходимости используйте элемент <DisplayName> , чтобы пометить политику в редакторе прокси-сервера пользовательского интерфейса управления другим именем на естественном языке.

Н/Д Необходимый
continueOnError

Установите значение false , чтобы возвращать ошибку в случае сбоя политики. Это ожидаемое поведение для большинства политик.

Установите значение true , чтобы выполнение потока продолжалось даже после сбоя политики.

ЛОЖЬ Необязательный
enabled

Установите значение true , чтобы обеспечить соблюдение политики.

Установите значение false , чтобы отключить политику. Политика не будет применена, даже если она останется привязанной к потоку.

истинный Необязательный
async

Этот атрибут устарел.

ЛОЖЬ Устарело

Элемент <DisplayName>

Используйте в дополнение к атрибуту name , чтобы пометить политику в редакторе прокси-сервера пользовательского интерфейса управления другим именем на естественном языке.

<DisplayName>Policy Display Name</DisplayName>
По умолчанию

Н/Д

Если вы опустите этот элемент, будет использовано значение атрибута name политики.

Присутствие Необязательный
Тип Нить

Элемент <Operation>

Определяет, кодирует или декодирует ли правило учетные данные в формате Base64.

<Operation>Encode</Operation>
По умолчанию: Н/Д
Присутствие Обязательно
Тип:

Строка.

Действительные значения:

  • Закодировать
  • Decode

Элемент <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").
steps.basicauthentication.UnresolvedVariable 500 Не указаны необходимые исходные переменные для декодирования или кодирования. Эта ошибка может возникнуть, только если для параметра IgnoreUnresolvedVariables задано значение false.

Ошибки развертывания

Эти ошибки могут возникать при развертывании прокси-сервера, содержащего это правило.

Название ошибки Когда возникает Исправить
UserNameRequired Для именованной операции должен быть указан элемент <User>.
PasswordRequired Для именованной операции должен быть указан элемент <Password>.
AssignToRequired Для именованной операции должен быть указан элемент <AssignTo>.
SourceRequired Для именованной операции должен быть указан элемент <Source>.

Переменные ошибок

Эти переменные задаются при возникновении ошибки выполнения. Подробнее о нарушениях правил…

Переменные Место Пример
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>

Схемы

Статьи по теме

Правила использования карт ключей-значений