Вы просматриваете документацию по Apigee Edge.
Перейдите к документации по Apigee X. Информация
Что
Правила LDAP позволяют:
- Аутентификация. Учетные данные пользователя, указанные в запросе, проверяются на соответствие учетным данным в поставщике LDAP. Правило LDAP предоставляет большую гибкость при аутентификации, позволяя использовать любое значение уникального имени вместе с паролем, даже если это значение уникального имени отсутствует в запросе. Например, вам нужно использовать для аутентификации адрес электронной почты и пароль. Возможны следующие варианты:
- Если адрес электронной почты указан в запросе, вы можете использовать его вместе с паролем для аутентификации LDAP.
- Если в запросе нет адреса электронной почты, но есть другой атрибут DN (например, номер телефона), вы можете использовать номер телефона, чтобы получить соответствующий адрес электронной почты из LDAP, а затем использовать адрес электронной почты и пароль для аутентификации.
- Поиск по уникальному имени (DN). Помимо аутентификации, вы можете использовать правила LDAP, чтобы определить атрибут пользователя в запросе, например адрес электронной почты, и выполнить запрос, который извлекает другие атрибуты DN из LDAP для этого пользователя. Извлеченное различающееся имя сохраняется в переменной.
Используйте правила LDAP, если доступ к защищенным ресурсам нужно ограничить пользователями поставщика LDAP, например администраторами, сотрудниками организации и разработчиками, особенно если доступ с помощью токена OAuth не нужен или слишком сложен. Правило также предназначено для получения метаданных доменного имени для использования в потоках прокси-сервера API.
Например, вы можете настроить выполнение вызова API только после успешной аутентификации пользователя в LDAP, а затем при необходимости получить атрибуты DN (доменного имени) для пользователя после успешной аутентификации.
Дополнительная информация:
- Как управлять правилами для паролей LDAP по умолчанию с помощью API
- "Важная информация о правилах в отношении паролей" в сообществе Apigee
Примеры
Аутентификация с помощью имени пользователя и пароля
<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 для аутентификации.
Аутентификация атрибута уникального имени
<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>Это правило получает различающееся имя пользователя с адресом электронной почты в заголовке запроса, а затем выполняет аутентификацию пользователя в 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 и получить атрибуты уникальных имен, запрос должен содержать учетные данные администратора.
Сведения об элементах
Ниже приведены описания элементов и атрибутов правил LDAP.
|
Элемент |
Описание |
|---|---|
|
|
Родительский элемент с атрибутом name, в который нужно ввести название правила. |
|
|
При использовании правила LDAP с настраиваемым поставщиком LDAP (не от Apigee) укажите полное имя класса коннектора LDAP.
Это класс, в котором вы реализовали интерфейс |
|
|
Введите название среды ресурса LDAP. Подробнее о том, как создать ресурс LDAP… |
|
|
Базовый уровень LDAP, на котором хранятся все ваши данные. Например, в поставщике LDAP Apigee все данные находятся в разделе
|
|
|
|
|
Аутентификация |
|
|
|
Родительский элемент для реализованной вами процедуры аутентификации. |
|
|
Пустой элемент, который принимает один из следующих атрибутов:
Если вы не выполняете аутентификацию с помощью имени пользователя или если имя пользователя не включено в запрос, этот элемент добавлять не нужно. Если в запросе есть имя пользователя, но вы хотите аутентифицировать пользователя с помощью атрибута DN, отличного от имени пользователя, например адреса электронной почты, добавьте |
|
|
Пустой элемент, который принимает один из следующих атрибутов:
|
|
|
Если вы хотите выполнять аутентификацию с помощью атрибута DN, отличного от имени пользователя, например адреса электронной почты, настройте правила LDAP так, чтобы атрибут DN извлекался из запроса (например, имени пользователя), который используется для идентификации пользователя в LDAP, получения адреса электронной почты и аутентификации пользователя. Например, если в LDAP для хранения адресов электронной почты используется атрибут "mail",
|
|
Поиск |
|
|
|
Родительский элемент для реализованного вами поискового поведения. |
|
|
Определив пользователя с помощью метаданных в запросе или ответе, вы можете использовать этот элемент, чтобы получить дополнительные атрибуты различающегося имени для пользователя из LDAP. Например, если запрос содержит адрес электронной почты пользователя, а в LDAP для хранения адресов электронной почты пользователей определен атрибут
Этот запрос ищет в LDAP адрес электронной почты, соответствующий адресу в запросе, и теперь правило может извлекать дополнительные атрибуты уникального имени для этого пользователя с помощью элемента Attributes. |
|
|
Используйте один или несколько элементов Например, после того как Значения атрибутов – это названия атрибутов DN, определенные в LDAP. <Attributes> <Attribute>address</Attribute> <Attribute>phone</Attribute> <Attribute>title</Attribute> </Attributes> |
Примечания
Apigee Edge для частного облака позволяет использовать поставщика LDAP в вызовах API. С помощью правила LDAP приложения могут аутентифицировать учетные данные пользователей, хранящиеся в LDAP, а вы можете получать уникальные имена (DN) из LDAP – метаданные или атрибуты, связанные с каждым пользователем, например адрес электронной почты, адрес и номер телефона. Возвращенное различающееся имя хранится в переменной для дальнейшего использования прокси-сервером API.
Как создать ресурс LDAP
В политике LDAP используется ресурс LDAP, созданный в Apigee Edge. Ресурс LDAP содержит информацию о подключении к репозиторию LDAP.
Чтобы создать ресурсы LDAP и управлять ими, используйте следующие API и полезную нагрузку:
API
Чтобы создать ресурс LDAP (POST) или получить список всех ресурсов LDAP (GET), выполните следующие действия:
/v1/organizations/org_name/environments/environment/ldapresources
Чтобы получить подробную информацию о ресурсе LDAP, обновить его или удалить, нажмите на значок "Подробности" (GET), "Обновить" (POST) или "Удалить" (DELETE).
/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 для него. Вот как это сделать:
- В классе поставщика 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(); } - В
<LdapConnectorClass>конфигурации правил (см. следующие разделы) добавьте полное имя класса специального поставщика LDAP. - Скачайте файл custom-ldap.jar_.zip. (Возможно, вам потребуется нажать правой кнопкой мыши и выбрать Сохранить как.)
- Распакуйте его.
- Добавьте файл custom-ldap.jar в среду и убедитесь, что он находится в пути к классам.
- Создайте ресурс среды для поставщика LDAP. Название ресурса среды будет использоваться в элементе
<LdapResource>правила LDAP.
Использование UnboundID LDAP SDK для Java
Вы можете использовать UnboundID LDAP SDK с правилом LDAP, но сначала вам нужно скачать версию 2.3.1 и добавить ее в каждый путь к классам обработчика сообщений.
Чтобы использовать UnboundID LDAP SDK с правилами LDAP:
- Откройте браузер и перейдите в репозиторий файлов Sourceforge для UnboundID LDAP SDK:
https://sourceforge.net/projects/ldap-sdk/files/
- Найдите версию 2.3.1 (SE или Standard Edition) SDK и скачайте ZIP-файл для этой версии. Например, скачайте файл unboundid-ldapsdk-2.3.1-se.zip.
- Извлеките 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, хотя это необязательно. - На каждом узле Message Processor:
- Скопируйте JAR-файл в каталог
/opt/apigee/edge-gateway/lib/thirdpartyпроцессора сообщений. - При необходимости предоставьте пользователю Apigee разрешение на доступ к JAR-файлу, чтобы процессор сообщений мог его использовать.
- Перезапустите Message Processor:
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
Edge добавляет все сторонние библиотеки в каталоге
/opt/apigee/edge-gateway/lib/thirdpartyв путь к классам. - Скопируйте JAR-файл в каталог
Переменные процесса
Ниже перечислены переменные правил LDAP, заполняемые SearchQuery.
|
Переменная |
Описание |
|---|---|
ldap.policyName.execution.success |
После выполнения правила эта переменная потока содержит значение "true" или "false" в зависимости от результата. |
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. |