LDAP-политика

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

Что

Политика LDAP обеспечивает:

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

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

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

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

Образцы

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

<Ldap name="4GLdapPolicy">
   <LdapResource>ldap1</LdapResource>
   <Authentication>
       <UserName ref="request.header.username"/>
       <Password ref="request.header.password"/>
       <Scope>subtree</Scope>
       <BaseDN ref="apigee.baseDN"></BaseDN> <!-- default is dc=apigee,dc=com -->
    </Authentication>
 </Ldap>

В этом примере обеспечивается проверка подлинности поставщика LDAP. Политика передает имя пользователя и пароль из запроса в LDAP для аутентификации.

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

<Ldap name="LdapPolicy">
   <LdapResource>ldap1</LdapResource>
   <Authentication>
       <Password ref="request.header.password"/>
       <SearchQuery>mail={request.header.mail}</SearchQuery>
       <Scope>subtree</Scope>
       <BaseDN ref="apigee.baseDN"></BaseDN> <!-- default is dc=apigee,dc=com -->
    </Authentication>
 </Ldap>

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

Поиск LDAP

<Ldap name="LdapPolicy">
    <!-- using a custom LDAP provider -->
    <LdapConnectorClass>com.custom.ldap.MyProvider</LdapConnectorClass>
    <LdapResource>MyLdap</LdapResource>
    <Search>
        <BaseDN ref="apigee.baseDN"></BaseDN> <!-- default is dc=apigee,dc=com -->
        <SearchQuery>mail={request.header.mail}</SearchQuery>
        <Attributes>
            <Attribute>address</Attribute>
            <Attribute>phone</Attribute>
            <Attribute>title</Attribute>
        </Attributes>
        <Scope></Scope> <!-- default is ‘subtree’ -->
    </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 не разрешается во время выполнения, используется значение.

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, а вы можете получать отличительные имена (DN) из LDAP — метаданные или атрибуты, связанные с каждым пользователем, такие как адрес электронной почты, адрес и номер телефона. Возвращенное 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="ldap1">
  <Connection>
    <Hosts>
      <!-- port is optional: defaults to 389 for ldap:// and 636 for ldaps:// -->
      <Host port="636">foo.com</Host>
    </Hosts>
    <SSLEnabled>false</SSLEnabled> <!-- optional, defaults to false -->
    <Version>3</Version> <!-- optional, defaults to 3-->
    <Authentication>simple</Authentication> <!-- optional, only simple supported -->
    <ConnectionProvider>jndi|unboundid</ConnectionProvider> <!-- required -->
    <ServerSetType>single|round robin|failover</ServerSetType> <!-- not applicable for jndi -->
    <!-- If using a custom LDAP provider, the fully qualified class: -->
    <LdapConnectorClass>com.custom.ldap.MyProvider</LdapConnectorClass>
  </Connection>
  <ConnectPool enabled="true"> <!-- enabled is optional, defaults to true -->
    <Timeout>30000</Timeout> <!-- optional, in milliseconds; if not set, no timeout -->
    <Maxsize>50</Maxsize> <!-- optional; if not set, no max connections -->
    <Prefsize>30</Prefsize> <!-- optional; if not set, no pref size -->
    <Initsize></Initsize> <!-- optional; if not set, defaults to 1 -->
    <Protocol></Protocol> <!-- optional; if not set, defaults to 'ssl plain' -->
  </ConnectPool>
  <Admin>
    <DN>cn=manager,dc=apigee,dc=com</DN>
    <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:password -d \
  '<LdapResource name="ldap1">
    <Connection>
      <Hosts>
      <Host>foo.com</Host>
      </Hosts>
      <SSLEnabled>false</SSLEnabled>
      <Version>3</Version>
      <Authentication>simple</Authentication>
      <ConnectionProvider>unboundid</ConnectionProvider>
      <ServerSetType>round robin</ServerSetType>
    </Connection>
    <ConnectPool enabled="true">
      <Timeout>30000</Timeout>
      <Maxsize>50</Maxsize>
      <Prefsize>30</Prefsize>
      <Initsize></Initsize>
      <Protocol></Protocol>
    </ConnectPool>
    <Admin>
      <DN>cn=manager,dc=apigee,dc=com</DN>
      <Password>secret</Password>
    </Admin>
  </LdapResource>'

Коды ответов

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

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

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

Использование собственного поставщика LDAP

Apigee Edge для частного облака поставляется с поставщиком 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 в свою среду и убедитесь, что он находится в вашем пути к классам.
  6. Создайте ресурс среды для вашего провайдера LDAP. Вы будете использовать имя ресурса среды в элементе <LdapResource> политики LDAP.

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

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

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

  1. Откройте браузер и перейдите в хранилище файлов Sourceforge для UnboundID LDAP SDK:
    https://sourceforge.net/projects/ldap-sdk/files/
  2. Найдите версию 2.3.1 (SE или Standard Edition ) SDK и загрузите 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 в путь к классам.

    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.