Базовая политика аутентификации

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

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

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

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

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

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

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

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

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

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

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

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

Элемент <DisplayName>

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

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

Н/Д

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

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

Элемент <Операция>

Определяет, будет ли политика кодировать или декодировать учетные данные в формате 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»).
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>

Схемы

Связанные темы

Политика операций по созданию карты ключевых значений