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

Вы просматриваете документацию Apigee Edge .
Перейти к документации Apigee X.
info

Что

Позволяет использовать облегченную базовую аутентификацию для обеспечения безопасности последней мили. Политика принимает имя пользователя и пароль, кодирует их в Base64 и записывает полученное значение в переменную. Результирующее значение имеет вид Basic Base64EncodedString . Обычно это значение записывается в HTTP-заголовок, например, в заголовок Authorization .

Политика также позволяет декодировать учетные данные, хранящиеся в строке, закодированной в Base64, в имя пользователя и пароль.

Видео: В этом видео показано, как закодировать имя пользователя и пароль в формате base64, используя политику базовой аутентификации.

Видео: В этом видео показано, как декодировать имя пользователя и пароль в кодировке base64, используя политику базовой аутентификации.

Образцы

Исходящее кодирование

<BasicAuthentication name="ApplyBasicAuthHe>ader<"
   D>isplayNameApplyBasic<AuthHeader/D>ispl<ayName
  > Opera<tionEncode>/Ope<ration
   IgnoreUnresolve>dVari<ablesfalse/IgnoreUnresolve>dVar<iables
   User ref="credenti>als.<username" /
   Password ref=&quo>t;cr<edentials.password" />
   AssignTo createNew="<;false&qu>o<t;request.header.Aut>horization/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="BasicA>uth<Crede>ntials&q<uot;
 > Sc<opeapiproxy/Scope
  Get assignTo="creden>tials<.us>ername&<quot; ind>ex='<1'
   > Key
<    >  P<aram>ete<rusername/Parameter
    /Key
  /Get
  Get ass>ignTo<=&q>uot;cre<dentials.>password<" ind>ex=&#<39;1><9;
 > <  Key
      Parameterp>assword/Parameter
    /Key
  /Get
/KeyValueMapOperations
      

Входящее декодирование

<BasicAuthentication name="DecodeBaseAuthHea>ders<"
   D>isplayNameDecode Basic Authenticat<ion Header/D>ispl<ayName
  > Opera<tionDecode>/Ope<ration
   IgnoreUnresolve>dVari<ablesfalse/IgnoreUnresolve>dVar<iables
   User ref="request.hea>der.<username" /
   Password ref="r>eque<st.hea>der.password" /
   Sour<cereque>s<t.header.Authorizati>on/Source
/BasicAuthentication

В этом примере политики имя пользователя и пароль декодируются из HTTP-заголовка Authorization , как указано в элементе <Source> . Строка в кодировке Base64 должна иметь формат Basic Base64EncodedString.

Политика записывает декодированное имя пользователя в переменную request.header.username , а декодированный пароль — в переменную request.header.password .


О политике базовой аутентификации

Политика имеет два режима работы:

  • Кодирование : Base64 кодирует имя пользователя и пароль, хранящиеся в переменных.
  • Декодирование : декодирует имя пользователя и пароль из строки, закодированной в формате Base64.

Имя пользователя и пароль обычно хранятся в хранилище ключей/значений, а затем считываются из него во время выполнения. Подробнее об использовании хранилища ключей/значений см. в разделе «Политика операций с картой ключей и значений» .

Ссылка на элемент

Ссылка на элемент описывает элементы и атрибуты политики BasicAuthentication.

<BasicAuthentication async="false" continueOnError="false" enabled="true"> nam<e="Bas>ic-Authentication-1&qu<ot;
   Displ>ayNa<meBasic A>uthent<ication 1/>Disp<layName
   OperationEncod>e/Ope<ration
   IgnoreUnresolved>Vari<ablesfalse/IgnoreUnresolvedVariab>les
<   User ref="credentials.usernam>e&qu<ot; /
   Password ref=&quo>t;credentials.password"< /
   Ass>ignT<o crea>teNew="false"reque<st.head>er<.Authorization/Assig>nTo
   Sourcerequest.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.userna>me" / 
По умолчанию: Н/Д
Присутствие: Необходимый
Тип:

Н/Д

Атрибуты

Атрибут Описание По умолчанию Присутствие
реф

Переменная, из которой политика динамически считывает имя пользователя (кодирует) или записывает имя пользователя (декодирует).

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

Элемент <Пароль>

  • Для кодирования используйте элемент <Password> , чтобы указать переменную, содержащую пароль.
  • Для декодирования укажите переменную, в которую записан декодированный пароль.
<Password ref="credentials.passwo>rd" /
По умолчанию: Н/Д
Присутствие: Необходимый
Тип:

Н/Д

Атрибуты

Атрибут Описание По умолчанию Присутствие
реф

Переменная, из которой политика динамически считывает пароль (кодирует) или записывает пароль (декодирует).

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

Элемент <AssignTo>

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

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

<AssignTo createNew="f>alse"request.header.Aut<horizatio>n/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