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

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

Ссылка на ошибку

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

Схемы

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

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