Wyświetlasz dokumentację Apigee Edge.
Zapoznaj się z dokumentacją Apigee X. info
Co
Zasady LDAP zapewniają:
- Uwierzytelnianie: dane logowania użytkownika podane w żądaniu są weryfikowane na podstawie danych logowania dostawcy LDAP. Zasady LDAP zapewniają dużą elastyczność w zakresie uwierzytelniania, umożliwiając używanie dowolnej wartości DN wraz z hasłem, nawet jeśli żądana wartość DN nie znajduje się w żądaniu. Załóżmy na przykład, że do uwierzytelniania musisz użyć adresu e-mail i hasła. Dostępne są te opcje:
- Jeśli adres e-mail znajduje się w żądaniu, możesz go po prostu użyć z hasłem do uwierzytelniania LDAP.
- Jeśli w żądaniu nie ma adresu e-mail, ale jest inny atrybut DN (np. numer telefonu), możesz użyć numeru telefonu, aby uzyskać odpowiedni adres e-mail z LDAP, a następnie użyć adresu e-mail i hasła do uwierzytelnienia.
- Wyszukiwanie nazwy wyróżniającej: oprócz uwierzytelniania możesz też użyć zasad LDAP, aby zidentyfikować w żądaniu atrybut użytkownika, np. adres e-mail, i wykonać zapytanie, które pobierze z LDAP inne atrybuty nazwy wyróżniającej tego użytkownika. Pobrany DN jest przechowywany w zmiennej.
Używaj zasad LDAP, gdy dostęp do chronionych zasobów powinien być ograniczony do użytkowników dostawcy LDAP, takich jak administratorzy, użytkownicy organizacji i programiści, zwłaszcza gdy dostęp za pomocą tokena OAuth jest niepotrzebny lub zbyt złożony. Zasady te służą też do pobierania metadanych nazwy domeny do wykorzystania w przepływach proxy interfejsu API.
Możesz na przykład wywołać interfejs API tylko wtedy, gdy użytkownik zostanie uwierzytelniony w LDAP. Następnie możesz opcjonalnie pobrać atrybuty DN (nazwa domeny) użytkownika po pomyślnym uwierzytelnieniu.
Więcej informacji znajdziesz w tych artykułach:
- Zarządzanie domyślnymi zasadami haseł LDAP w przypadku zarządzania interfejsami API
- „Important information about your password policy” (Ważne informacje o zasadach dotyczących haseł) w Społeczności Apigee
Przykłady
Uwierzytelnianie za pomocą nazwy użytkownika / hasła
<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>Ten przykład umożliwia uwierzytelnianie za pomocą dostawcy LDAP. Zasada przekazuje nazwę użytkownika i hasło z żądania do LDAP w celu uwierzytelnienia.
Uwierzytelnianie atrybutu nazwy wyróżniającej
<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>Ta zasada pobiera DN użytkownika z adresem e-mail w nagłówku żądania, a następnie uwierzytelnia użytkownika w LDAP za pomocą hasła podanego w nagłówku żądania.
Wyszukiwanie w 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>
Ta zasada odwołuje się do niestandardowego dostawcy LDAP. Używa adresu e-mail w nagłówku żądania do identyfikacji użytkownika, a następnie pobiera adres, numer telefonu i tytuł użytkownika z LDAP. Pobrane atrybuty DN są przechowywane w zmiennej. Zobacz „Zmienne dotyczące konkretnych zasad”.
Aby wyszukiwać w LDAP i pobierać atrybuty DN, żądanie musi zawierać dane logowania administratora.
Odwołanie do elementu
Poniżej znajdziesz opisy elementów i atrybutów zasad LDAP.
|
Element |
Opis |
|---|---|
|
|
Element nadrzędny z atrybutem name, w którym możesz wpisać nazwę zasady. |
|
|
Jeśli używasz zasady LDAP z niestandardowym dostawcą LDAP (nie jest on dostarczany przez Apigee), podaj w pełni kwalifikowaną klasę łącznika LDAP.
Jest to klasa, w której zaimplementowano interfejs |
|
|
Wpisz nazwę środowiska zasobu LDAP. Więcej informacji znajdziesz w artykule Tworzenie zasobu LDAP. |
|
|
Podstawowy poziom LDAP, w którym znajdują się wszystkie Twoje dane. Na przykład w przypadku dostawcy LDAP Apigee wszystkie dane znajdują się w
|
|
|
|
|
Uwierzytelnianie |
|
|
|
Element nadrzędny dla sposobu uwierzytelniania, który wdrażasz. |
|
|
Pusty element, który przyjmuje jeden z tych atrybutów:
Jeśli nie uwierzytelniasz się za pomocą nazwy użytkownika lub jeśli nazwa użytkownika nie jest uwzględniona w żądaniu, nie musisz uwzględniać tego elementu. Jeśli w żądaniu znajduje się nazwa użytkownika, ale chcesz uwierzytelnić użytkownika za pomocą atrybutu DN innego niż nazwa użytkownika, np. adresu e-mail, dodaj znak |
|
|
Pusty element, który przyjmuje jeden z tych atrybutów:
|
|
|
Jeśli chcesz uwierzytelniać użytkowników za pomocą atrybutu DN innego niż nazwa użytkownika, np. adresu e-mail, skonfiguruj zasady LDAP tak, aby pobierać z żądania atrybut DN (np. nazwę użytkownika), który jest używany do identyfikowania użytkownika w LDAP, pobierania adresu e-mail i uwierzytelniania użytkownika. Załóżmy na przykład, że LDAP definiuje atrybut „mail” do przechowywania adresu e-mail:
|
|
Szukaj |
|
|
|
Element nadrzędny dla implementowanego przez Ciebie działania związanego z wyszukiwaniem. |
|
|
Identyfikując użytkownika za pomocą metadanych w żądaniu lub odpowiedzi, możesz użyć tego elementu do pobrania z LDAP dodatkowych atrybutów nazwy wyróżniającej użytkownika. Jeśli na przykład żądanie zawiera adres e-mail użytkownika, a LDAP definiuje atrybut
To zapytanie wyszukuje w LDAP adres e-mail pasujący do adresu e-mail w żądaniu, a zasady mogą teraz pobierać dodatkowe atrybuty nazwy wyróżniającej użytkownika za pomocą elementu Attributes. |
|
|
Użyj co najmniej 1 elementu Na przykład po tym, jak Wartości atrybutów to nazwy atrybutów DN zdefiniowane w LDAP. <Attributes> <Attribute>address</Attribute> <Attribute>phone</Attribute> <Attribute>title</Attribute> </Attributes> |
Zastosowanie
Apigee Edge for Private Cloud umożliwia korzystanie z dostawcy LDAP w wywołaniach interfejsu API. Dzięki zasadom LDAP aplikacje mogą uwierzytelniać dane logowania na podstawie użytkowników przechowywanych w LDAP, a Ty możesz pobierać z LDAP nazwy wyróżniające (DN) – metadane lub atrybuty powiązane z każdym użytkownikiem, takie jak adres e-mail, adres i numer telefonu. Zwrócona nazwa wyróżniająca jest przechowywana w zmiennej do dalszego wykorzystania przez serwer proxy interfejsu API.
Tworzenie zasobu LDAP
Zasady LDAP korzystają z zasobu LDAP utworzonego w Apigee Edge. Zasób LDAP zawiera informacje o połączeniu z repozytorium LDAP.
Aby tworzyć zasoby LDAP i nimi zarządzać, użyj tego interfejsu API i ładunku:
Interfejs API
Utwórz (POST) zasób LDAP lub wyświetl listę (GET) wszystkich zasobów LDAP:
/v1/organizations/org_name/environments/environment/ldapresources
Szczegółowe informacje o zasobie LDAP (GET), jego aktualizowaniu (POST) i usuwaniu (DELETE):
/v1/organizations/org_name/environments/environment/ldapresources/ldap_resource_name
Ładunek
Poniżej znajdziesz przykładowy ładunek XML z komentarzami dotyczącymi użycia.
<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>
Przykład użycia curl: tworzenie zasobu LDAP
Poniższy przykład tworzy zasób LDAP o nazwie 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>'
Kody odpowiedzi
Poniżej znajdziesz kody odpowiedzi HTML, które są zwracane przez zasady w przypadku powodzenia lub niepowodzenia:
- Sukces: 200
- Błąd: 401
Używanie niestandardowego dostawcy LDAP w Edge for Private Cloud
Korzystanie z niestandardowego dostawcy LDAP
Apigee Edge for Private Cloud ma dostawcę LDAP, który jest już skonfigurowany do interakcji z zasadami LDAP. Jeśli jednak używasz niestandardowego dostawcy LDAP, musisz włączyć obsługę zasad LDAP. Aby to zrobić:
- W klasie dostawcy LDAP zaimplementuj interfejs
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(); } - W
<LdapConnectorClass>konfiguracji zasad (w następnych sekcjach) dodaj pełną nazwę klasy niestandardowego dostawcy LDAP. - Pobierz ten plik: custom-ldap.jar_.zip. (Może być konieczne kliknięcie prawym przyciskiem myszy i wybranie opcji Zapisz jako).
- Rozpakuj go.
- Dodaj plik custom-ldap.jar do środowiska i upewnij się, że znajduje się on w ścieżce klasy.
- Utwórz zasób środowiska dla dostawcy LDAP. Nazwę zasobu środowiska użyjesz w elemencie
<LdapResource>zasady LDAP.
Korzystanie z pakietu UnboundID LDAP SDK for Java
Z zasadami LDAP możesz używać pakietu UnboundID LDAP SDK, ale najpierw musisz pobrać wersję 2.3.1 i dodać ją do ścieżek klas każdego procesora wiadomości.
Aby używać pakietu UnboundID LDAP SDK z zasadami LDAP:
- Otwórz przeglądarkę i przejdź do repozytorium plików Sourceforge dla pakietu UnboundID LDAP SDK:
https://sourceforge.net/projects/ldap-sdk/files/
- Znajdź wersję 2.3.1 (SE lub Standard Edition) pakietu SDK i pobierz plik ZIP dla tej wersji. Na przykład pobierz plik „unboundid-ldapsdk-2.3.1-se.zip”.
- Wyodrębnij plik JAR z pliku ZIP pakietu SDK, jak pokazano w tym przykładzie:
unzip -j -d ~/tmp ~/Downloads/unboundid-ldapsdk-2.3.1-se.zip unboundid-ldapsdk-2.3.1-se/unboundid-ldapsdk-se.jar
To polecenie wyodrębnia tylko plik JAR do katalogu ~/tmp. Usuwa strukturę katalogu za pomocą
-j, ale jest to opcjonalne. - Na każdym węźle procesora wiadomości:
- Skopiuj plik JAR do katalogu
/opt/apigee/edge-gateway/lib/thirdpartyprocesora wiadomości. - W razie potrzeby przyznaj użytkownikowi Apigee uprawnienia do pliku JAR, aby procesor wiadomości mógł uzyskać do niego dostęp.
- Ponownie uruchom procesor wiadomości:
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
Edge dodaje wszystkie biblioteki innych firm w katalogu
/opt/apigee/edge-gateway/lib/thirdpartydo ścieżki klasy. - Skopiuj plik JAR do katalogu
Zmienne przepływu
Poniżej znajdziesz zmienne zasad LDAP wypełniane przez SearchQuery.
|
Zmienna |
Opis |
|---|---|
ldap.policyName.execution.success |
Po wykonaniu zasady ta zmienna przepływu zawiera wartość „true” lub „false” w zależności od wyniku. |
ldap.policyName.search.result[index]. attribute.attrName[index]=value |
Elastyczny format tej zmiennej, a w szczególności indeks, uwzględnia wiele atrybutów, a także atrybuty z wieloma wartościami. Indeks to liczba zaczynająca się od 1. Jeśli nie podasz numeru indeksu, domyślnie zostanie użyty numer 1. Jeśli zasada zwraca adres, numer telefonu i adres e-mail, możesz pobrać pierwszy atrybut i jego wartość za pomocą tych zmiennych: ldap.policyName.search.result.attribute.address ldap.policyName.search.result.attribute.phone ldap.policyName.search.result.attribute.email Jeśli chcesz pobrać trzeci atrybut adresu z wyników wyszukiwania, użyj tego kodu: ldap.policyName.search.result[3].attribute.address Jeśli atrybut miał wiele wartości (np. użytkownik ma kilka adresów e-mail), drugi adres e-mail możesz pobrać z wyników w ten sposób: ldap.policyName.search.result.attribute.mail[2] |
Kody błędów
Błędy zwracane przez zasady Edge mają spójny format opisany w dokumentacji kodów błędów.
Ta zasada używa tych kodów błędów:
| Kod błędu | przekaz, |
|---|---|
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. |