LDAP-политика

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

Что

Политика LDAP предусматривает:

  • Аутентификация : Учётные данные пользователя, предоставленные в запросе, проверяются на соответствие учётным данным LDAP-провайдера. Политика LDAP обеспечивает большую гибкость аутентификации, позволяя использовать любое значение DN вместе с паролем, даже если нужное вам значение DN отсутствует в запросе. Например, предположим, что для аутентификации вам нужно использовать адрес электронной почты и пароль. Возможны следующие варианты:
    • Если адрес электронной почты указан в запросе, вы можете просто использовать его вместе с паролем для аутентификации LDAP.
    • Если адрес электронной почты отсутствует в запросе, но есть другой атрибут DN (например, номер телефона), вы можете использовать номер телефона для получения соответствующего адреса электронной почты из LDAP, а затем использовать адрес электронной почты и пароль для аутентификации.
  • Поиск по отличительному имени (DN) : Помимо аутентификации, вы также можете использовать политику LDAP для определения атрибута пользователя в запросе, например адреса электронной почты, и выполнить запрос, который извлекает другие атрибуты DN этого пользователя из LDAP. Полученное DN сохраняется в переменной.

Используйте политику LDAP, когда доступ к защищённым ресурсам должен быть ограничен пользователями вашего LDAP-провайдера, такими как администраторы, пользователи организации и разработчики, особенно когда доступ к токену OAuth не нужен или слишком «тяжелый». Эта политика также предназначена для извлечения метаданных доменного имени для использования в потоках прокси-API.

Например, можно настроить выполнение вызова API только в том случае, если пользователь успешно прошел аутентификацию в LDAP; а затем при необходимости извлечь атрибуты DN (доменного имени) для пользователя после успешной аутентификации.

Дополнительную информацию см.:

Образцы

Аутентификация по имени пользователя и паролю

<Ldap name="4GLdapPo>licy<"
   Ld>apRes<ourceldap1/Ld>apRe<source
   Auth>enticati<on
       UserName ref="request.he>ader.use<rname"/
       Password ref=">request.<heade>r.passw<ord&qu>ot;/
   <    Scopesubtree/Scope
   ><    Bas>e<DN ref="apigee.baseDN"/B>aseDN< !-- default is> d<c=api>gee,dc=com --
    /Authentication
 /Ldap

Этот пример обеспечивает аутентификацию через LDAP-провайдера. Политика передаёт имя пользователя и пароль из запроса в LDAP для аутентификации.

Аутентификация атрибута DN

<Ldap name="LdapPo>licy<"
   Ld>apRes<ourceldap1/Ld>apRe<source
   Auth>enticati<on
       Password ref="request.he>ader.pas<sword">/
       SearchQuerymail={<request.head>er.mail}</Sear>chQuery<
     >  Scopes<ubtree/Scope
       BaseDN>< ref=&q>u<ot;apigee.baseDN"/BaseDN !-- >defau<lt is dc=apigee>,d<c=com> --
    /Authentication
 /Ldap

Эта политика получает DN пользователя с адресом электронной почты в заголовке запроса, а затем аутентифицирует пользователя через LDAP с паролем, указанным в заголовке запроса.

Поиск LDAP

<Ldap name="LdapPo>licy&<quot;
    !-- using a custom LDAP p>rovid<er --
    LdapConn>ectorClasscom.custom.ldap.<MyProvider/LdapConn>ector<Class
    Ld>apReso<urceMyLdap/Ld>apRes<ource<>/span>
    Searc<h
        BaseDN ref="><;apigee>.<baseDN"/BaseDN !-- default is> dc=apige<e,dc=com -->
        SearchQuerymail={<request.head>er.mail}/<SearchQuer>y
        Att<ributes
 >       <    Attrib>uteaddress/At<tribute
 >     <      Attr>ibutephone/At<tribute
 >     <      Attr>ibutetitl<e/Attribute>
        </Attr><ibutes>
<        Scope/S‘cope !-’- d>efaul<t is su>b<tree >--
    /Search
/Ldap

Эта политика ссылается на настраиваемого провайдера LDAP. Она использует адрес электронной почты в заголовке запроса для идентификации пользователя, а затем извлекает адрес, номер телефона и обращение пользователя из LDAP. Полученные атрибуты DN сохраняются в переменной. См. раздел «Переменные, специфичные для данной политики».

Для поиска LDAP и получения атрибутов DN запрос должен включать учетные данные администратора.

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

Ниже приведены описания элементов и атрибутов политики LDAP.

Элемент

Описание

Ldap

Родительский элемент с атрибутом имени, в который можно ввести имя политики.

LdapConnectorClass

При использовании политики LDAP с пользовательским провайдером LDAP (не предоставляемым Apigee) укажите полный класс коннектора LDAP. Это класс, в котором вы реализовали интерфейс ExternalLdapConProvider Apigee.

LdapResource

Введите имя среды для ресурса LDAP. Подробнее см. в разделе Создание ресурса LDAP .

BaseDN

Базовый уровень LDAP, на котором находятся все ваши данные. Например, в LDAP-провайдере Apigee все данные находятся в каталоге dc=apigee,dc=com .

  • ref : используется для указания переменной потока, содержащей значение BaseDN, например, apigee.baseDN. ref имеет приоритет над явным значением BaseDN. Если указаны и ref, и value, приоритет имеет ref. Если ref не разрешён во время выполнения, используется value.

Scope

  • объект : Аутентификация или поиск происходит только на базовом уровне LDAP.
  • onelevel : Аутентификация или поиск происходит на один уровень ниже базового уровня.
  • поддерево (по умолчанию): аутентификация или поиск происходит на базовом уровне и полностью рекурсивно ниже базы.

Аутентификация

Authentication

Родительский элемент для реализуемого вами поведения аутентификации.

UserName

Пустой элемент, принимающий один из следующих атрибутов:

  • ref : ссылка на имя пользователя в запросе, например request.header.username
  • значение : само имя пользователя

Если вы не выполняете аутентификацию с использованием имени пользователя или имя пользователя не включено в запрос, вам не нужно включать этот элемент.

Если имя пользователя указано в запросе, но вы хотите аутентифицировать пользователя с атрибутом DN, отличным от имени пользователя, например, адресом электронной почты, включите SearchQuery чтобы получить адрес электронной почты пользователя, связанный с паролем. Политика LDAP использует имя пользователя для запроса у LDAP-провайдера соответствующего адреса электронной почты, который затем используется для аутентификации.

Password

Пустой элемент, принимающий один из следующих атрибутов:

  • ref : Ссылка на пароль в запросе, например request.header.password
  • значение : сам зашифрованный пароль

SearchQuery

Если вы хотите выполнить аутентификацию с использованием атрибута DN, отличного от имени пользователя, например адреса электронной почты, настройте политику LDAP для получения атрибута DN из запроса (например, имени пользователя), который используется для идентификации пользователя в LDAP, получения адреса электронной почты и аутентификации пользователя.

Например, предположим, что LDAP определяет атрибут «mail» для хранения адреса электронной почты:

<SearchQuery>mail={request.header.mail}</SearchQuery>

Поиск

Search

Родительский элемент для реализуемого вами поведения поиска.

SearchQuery

Идентифицируя пользователя с помощью метаданных в запросе или ответе, вы можете использовать этот элемент для получения дополнительных атрибутов DN пользователя из LDAP. Например, если запрос содержит адрес электронной почты пользователя, а ваш LDAP определяет атрибут mail для хранения адресов электронной почты пользователей, вы можете использовать следующий параметр:

<SearchQuery>mail={request.header.mail}</SearchQuery>

Этот запрос ищет в LDAP адрес электронной почты, соответствующий адресу в запросе, и политика теперь может извлекать дополнительные атрибуты DN для этого пользователя с помощью элемента Attributes.

Attributes

Используйте один или несколько элементов <Attribute> для определения метаданных DN, которые вы хотите получить для пользователя. Требуется хотя бы один атрибут.

Например, после того как SearchQuery идентифицирует пользователя, политика теперь может извлекать атрибуты DN для пользователя, такие как адрес, номер телефона и титул пользователя, как показано в следующем примере.

Значения атрибутов — это имена атрибутов DN, определенные в вашем LDAP.

<Attributes>
  <Attribute>address</Attribute>
  <Attribute>phone</Attribute>
  <Attribute>title</Attribute>
</Attributes>

Заметки об использовании

Apigee Edge для частного облака позволяет использовать LDAP-провайдера в вызовах API. С помощью политики LDAP приложения могут аутентифицировать учётные данные пользователей, хранящихся в LDAP, а вы можете извлекать из LDAP уникальные имена (DN) — метаданные или атрибуты, связанные с каждым пользователем, такие как адрес электронной почты, почтовый адрес и номер телефона. Возвращаемое DN сохраняется в переменной для дальнейшего использования API-прокси.

Создать ресурс LDAP

Политика LDAP использует ресурс LDAP, созданный в Apigee Edge. Ресурс LDAP предоставляет информацию о подключении к вашему репозиторию LDAP.

Для создания и управления ресурсами LDAP используйте следующий API и полезную нагрузку:

API

Создайте ( POST ) ресурс LDAP или получите список ( GET ) всех ресурсов LDAP:

/v1/organizations/org_name/environments/environment/ldapresources

Получить сведения о ( GET ), обновить ( POST ) и удалить ( DELETE ) ресурс LDAP:

/v1/organizations/org_name/environments/environment/ldapresources/ldap_resource_name

Полезная нагрузка

Ниже приведен пример полезной нагрузки XML с комментариями по использованию.

<LdapResource name="l>dap<1"
  >Conne<ction>
    Ho<sts
      !-- port is optional: defaults to 389 for ldap:// and 636 for l>daps://< --
      Host >port=&q<uot;6>36&qu<ot;foo>.com/<Host
    />Hosts<
    SSLEna>b<ledfalse/SSLEnabled !-- optional, >defau<lts to >f<alse --
> <   Version3/Version !-- optio>nal, <defaults to 3->-
    <Authentications>i<mple/Authentication !-- optional, only> simp<le supported --
  >  ConnectionPr<oviderjndi|unboundi>d</ConnectionProv>ider <!-- required >--
    ServerSetTypesingle|<round robin|fa>i<lover/ServerSetType !-- not ap>plica<ble for jndi --
    !-- If using a custom LDAP provider, the fully> qual<ified class: --
  >  LdapConnectorClasscom.cu<stom.ldap.MyProvide>r/L<dapConnecto>rCl<ass
  /Connection
  Connec>t<Pool enabled="true" !-- enabled is> opti<onal, d>efaul<ts to tr>u<e --
    Timeout30000/Timeout !-- optional, in milliseco>nds; <if not >se<t, no ti>m<eout --
    Maxsize50/Maxsize !-- optional; if >not s<et, no m>ax< connecti>o<ns --
    Prefsize30/Prefsize !-- optiona>l; if< not set><, no pref> <size --
    Initsize/Initsize !-- optional>; if <not set,>< defaults> <to 1 --
    Protocol/Protocol !-- optional; if not s>et,< defaults to> &#<39;ss>l pla<in>' --
  /ConnectPool
  A<dmi>n
   < DNcn=ma>nager,<dc=apigee>,dc<=com/D>N<
    Password>secret/Password
  /Admin
/LdapResource

Пример curl: создание ресурса LDAP

В следующем примере создается ресурс LDAP с именем ldap1 .

curl -X POST -H "Content-Type: application/xml" \
  https://api.enterprise.apigee.com/v1/organizations/myorg/environments/test/ldapresources \
  -u apigee_email:passwor<d -d \
  'LdapResourc>e nam<e="ld>ap1&quo<t;
  >  Conne<ctio>n
     < Host>s
     < Hostf>oo.com/<Host
     > /Hos<ts
      SS>LEnable<dfalse/>S<SLEnable>d
     < Version3/Vers>ion
  <    Authenticat>ionsimp<le/Authentication
>      Con<nectionProviderunbo>undid/C<onnectionProv>ider
      <ServerSetTyper>ound <robin/Serve>rSetT<ype
    /Connection
    Co>nnectPo<ol enab>led=&<quot;tru>e"<
      >Ti<meout300>00/Time<out
    >  <Maxsize50>/Maxsiz<e
      ><Prefsize3>0/Prefs<ize
    ><  Initsiz>e/Ini<tsize
      >Proto<col/P>rotocol<
 >   /ConnectPool
    Admin
 <   >  DNcn=<manager,>dc=api<gee,dc=co>m/DN
<      >Pas<swordsecret/P>assword
    /Admin
  /LdapResource'

Коды ответов

Ниже приведены коды ответов HTML, которые политика возвращает в случае успеха или неудачи:

  • Успех : 200
  • Ошибка : 401

Использование настраиваемого поставщика LDAP в Edge для частного облака

Использование пользовательского провайдера LDAP

Apigee Edge for Private Cloud поставляется с поставщиком LDAP, который уже настроен для взаимодействия с политикой LDAP. Однако, если вы используете собственный поставщик LDAP, необходимо включить поддержку политики LDAP в этом поставщике. Для этого:

  1. В классе поставщика LDAP реализуйте интерфейс ExternalLdapConProvider .
    public interface ExternalLdapConProvider {
      void doAuthentication(LdapBean LlapBean, String userDN, String password, String baseDN);
    
      void doSearchAndAuthentication(LdapBean LlapBean, String password, String baseDN, String query, int scope);
    
      Collection<Map<String, String[]>> doSearch(LdapBean LlapBean, String query,
        String baseDN, Collection<String> requiredAttributes, int scope);
    
      void closeConnections();
    }
  2. В <LdapConnectorClass> конфигурации политики (следующие разделы) добавьте полное имя класса вашего поставщика LDAP.
  3. Загрузите этот файл: custom-ldap.jar_.zip . (Возможно, вам придётся щелкнуть правой кнопкой мыши и выбрать «Сохранить как ».)
  4. Разархивируйте его.
  5. Добавьте файл custom-ldap.jar в свою среду и убедитесь, что он есть в вашем classpath.
  6. Создайте ресурс среды для вашего LDAP-провайдера. Имя ресурса среды будет использоваться в элементе <LdapResource> политики LDAP.

Использование UnboundID LDAP SDK для Java

Вы можете использовать UnboundID LDAP SDK с политикой LDAP, но сначала необходимо загрузить версию 2.3.1 и добавить ее в каждый classpath вашего обработчика сообщений.

Чтобы использовать UnboundID LDAP SDK с политикой LDAP:

  1. Откройте браузер и перейдите в репозиторий файлов Sourceforge для UnboundID LDAP SDK:
    https://sourceforge.net/projects/ldap-sdk/files/
  2. Найдите версию SDK 2.3.1 (SE или Standard Edition ) и скачайте ZIP-файл для этой версии. Например, скачайте "unboundid-ldapsdk-2.3.1-se.zip".
  3. Извлеките JAR-файл из ZIP-файла SDK, как показано в следующем примере:
    unzip -j -d ~/tmp ~/Downloads/unboundid-ldapsdk-2.3.1-se.zip unboundid-ldapsdk-2.3.1-se/unboundid-ldapsdk-se.jar

    Эта команда извлекает только JAR-файл в каталог ~/tmp. С помощью -j можно удалить структуру каталогов, хотя это необязательно.

  4. На каждом узле процессора сообщений:
    1. Скопируйте JAR-файл в каталог /opt/apigee/edge-gateway/lib/thirdparty обработчика сообщений.
    2. При необходимости предоставьте пользователю Apigee разрешение на доступ к JAR-файлу, чтобы обработчик сообщений мог получить к нему доступ.
    3. Edge добавляет все сторонние библиотеки из каталога /opt/apigee/edge-gateway/lib/thirdparty в classpath.

    4. Перезапустите обработчик сообщений:
      /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart

Переменные потока

Ниже приведены переменные политики LDAP, заполняемые SearchQuery .

Переменная

Описание

ldap.policyName.execution.success

После выполнения политики эта переменная потока содержит значение «истина» или «ложь» в зависимости от результата.

ldap.policyName.search.result[index].
  attribute.attrName[index]=value

Гибкий формат этой переменной, в частности индекса, учитывает наличие нескольких атрибутов, а также атрибутов с несколькими значениями. Индекс — это число, начинающееся с 1. Если индекс не указан, по умолчанию используется индекс 1.

Если политика возвращает адрес, телефон и адрес электронной почты, вы можете получить первый атрибут и значение, используя следующие переменные:

ldap.policyName.search.result.attribute.address
ldap.policyName.search.result.attribute.phone
ldap.policyName.search.result.attribute.email

Если вы хотите получить третий атрибут адреса в результатах поиска, вы бы использовали это:

ldap.policyName.search.result[3].attribute.address

Если атрибут имеет несколько значений (например, если у пользователя несколько адресов электронной почты), вы бы извлекли второй адрес электронной почты из результатов следующим образом:

ldap.policyName.search.result.attribute.mail[2]

Коды ошибок

Ошибки, возвращаемые политиками Edge, имеют единый формат, описанный в справочнике кодов ошибок .

Эта политика использует следующие коды ошибок:

Код ошибки Сообщение
InvalidAttributeName Invalid attribute name {0}.
InvalidSearchBase Search base can not be empty.
InvalidValueForPassword Invalid value for password field. It can not be empty.
InvalidSearchScope Invalid scope {0}. Allowed scopes are {1}.
InvalidUserCredentials Invalid user credentials.
InvalidExternalLdapReference Invalid external ldap reference {0}.
LdapResourceNotFound Ldap resource {0} not found.
BaseDNRequired Base DN required.
OnlyReferenceOrValueIsAllowed Only value or reference is allowed for {0}.
AttributesRequired At least one attribute required for search action.
UserNameIsNull User name is null.
SearchQueryAndUserNameCannotBePresent Both search query and username can not be present in the authentication action. Please specify either one of them.