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

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

The following table describes attributes that are common to all policy parent elements:

Attribute Description Default Presence
name

The internal name of the policy. The value of the name attribute can contain letters, numbers, spaces, hyphens, underscores, and periods. This value cannot exceed 255 characters.

Optionally, use the <DisplayName> element to label the policy in the management UI proxy editor with a different, natural-language name.

N/A Required
continueOnError

Set to false to return an error when a policy fails. This is expected behavior for most policies.

Set to true to have flow execution continue even after a policy fails.

false Optional
enabled

Set to true to enforce the policy.

Set to false to turn off the policy. The policy will not be enforced even if it remains attached to a flow.

true Optional
async

This attribute is deprecated.

false Deprecated

<DisplayName> element

Use in addition to the name attribute to label the policy in the management UI proxy editor with a different, natural-language name.

<DisplayName>Policy Display Name</DisplayName>
Default

N/A

If you omit this element, the value of the policy's name attribute is used.

Presence Optional
Type String

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

Определяет, будет ли политика 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>

Для операции Encode указывает целевую переменную, которую необходимо задать с помощью кодированного значения, созданного этой политикой.

В следующем примере показано, что политика должна установить заголовок Authorization сообщения на сгенерированное значение:

<AssignTo createNew="false">request.header.Authorization</AssignTo>
По умолчанию: Н/Д
Присутствие: Требуется для операции Encode .
Тип:

Нить

Атрибуты

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

Если задано значение «false», присвоение переменной происходит только в том случае, если переменная в данный момент не установлена ​​(равна null).

Если «истина», присвоение переменной происходит всегда.

Обычно этому атрибуту задается значение «false» (по умолчанию).

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

Элемент <Источник>

Для декодирования используется переменная, содержащая строку в кодировке 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>

Схемы

Похожие темы

Политика операций Key Value Map