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

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

Внутреннее имя политики. Значение атрибута 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="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").
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.

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.
PasswordRequired The <Password> element must be present for the named operation.
AssignToRequired The <AssignTo> element must be present for the named operation.
SourceRequired The <Source> element must be present for the named operation.

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>

Схемы

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

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