Przeglądasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X. Informacje
Co
Zasada LDAP zapewnia:
- Uwierzytelnianie: dane logowania użytkownika podane w żądaniu są sprawdzane pod kątem danych logowania u dostawcy LDAP. Zasada LDAP zapewnia dużą elastyczność w zakresie uwierzytelniania, pozwalając na używanie dowolnej wartości nazwy wyróżniającej wraz z hasłem, nawet jeśli tej wartości wyróżniającej nie ma w żądaniu. Załóżmy na przykład, że do uwierzytelnienia potrzebujesz adresu e-mail lub hasła. Oto dostępne opcje:
- Jeśli w żądaniu znajduje się adres e-mail, możesz go po prostu użyć z hasłem na potrzeby 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 uwierzytelnić się za pomocą adresu e-mail / hasła.
- Wyszukiwanie nazwy wyróżniającej (DN): oprócz uwierzytelniania przy użyciu zasad LDAP możesz też identyfikować atrybut użytkownika w żądaniu, taki jak adres e-mail, i wykonywać zapytania, które pobierają inne atrybuty DN dla tego użytkownika z LDAP. Pobrana nazwa wyróżniająca jest przechowywana w zmiennej.
Użyj zasady LDAP, gdy dostęp do chronionych zasobów powinien być ograniczony do użytkowników u dostawcy LDAP – takich jak administratorzy, użytkownicy z organizacji lub programiści – zwłaszcza wtedy, gdy dostęp do tokena OAuth jest niepotrzebny lub zbyt duży. Zasada służy też do pobierania metadanych nazwy domeny do użycia w przepływach proxy interfejsów API.
Wywołanie interfejsu API może być na przykład wykonywane tylko po uwierzytelnieniu użytkownika w LDAP i opcjonalnie pobierać atrybuty nazwy domeny użytkownika po pomyślnym uwierzytelnieniu.
Dodatkowe informacje:
- Zarządzanie domyślnymi zasadami dotyczącymi haseł LDAP na potrzeby zarządzania interfejsami API
- „Ważne informacje o zasadach dotyczących haseł” w społeczności Apigee
Sample
Uwierzytelnianie za pomocą nazwy użytkownika i 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 przedstawia uwierzytelnianie przy użyciu dostawcy LDAP. Zasada przekazuje nazwę użytkownika i hasło z żądania do LDAP w celu uwierzytelnienia.
Uwierzytelnianie atrybutu 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>
Ta zasada pobiera nazwę wyróżniającą 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.
Przeszukiwanie 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. Zidentyfikuje użytkownika na podstawie adresu e-mail z nagłówka żądania, a następnie pobiera jego adres, numer telefonu i stanowisko z LDAP. Pobrane atrybuty nazwy wyróżniającej są przechowywane w zmiennej. Zobacz „Zmienne związane z zasadami”.
Aby można było przeszukiwać LDAP i pobierać atrybuty nazwy wyróżniającej, żądanie musi zawierać dane logowania administratora.
Odwołanie do elementu
Poniżej znajdziesz opisy elementów i atrybutów zasady LDAP.
Element |
Opis |
---|---|
|
Element nadrzędny z atrybutem „name” umożliwiającym wpisanie nazwy zasady. |
|
Jeśli używasz zasady LDAP z niestandardowym dostawcą LDAP (którym nie jest Apigee), określ w pełni kwalifikowaną klasę oprogramowania sprzęgającego LDAP.
To klasa, w której zaimplementowałeś interfejs |
|
Wpisz nazwę środowiska zasobu LDAP. Więcej informacji znajdziesz w artykule Tworzenie zasobu LDAP. |
|
Podstawowy poziom LDAP, na którym znajdują się wszystkie Twoje dane. Na przykład u dostawcy LDAP Apigee wszystkie dane znajdują się w domenie
|
|
|
Uwierzytelnianie |
|
|
Element nadrzędny implementowanego przez Ciebie sposobu uwierzytelniania. |
|
Pusty element, który przyjmuje jeden z tych atrybutów:
Jeśli nie uwierzytelniasz się za pomocą nazwy użytkownika lub jeśli w żądaniu nie podano nazwy użytkownika, nie musisz uwzględniać tego elementu. Jeśli w żądaniu znajduje się nazwa użytkownika, ale chcesz uwierzytelnić użytkownika przy użyciu atrybutu wyróżniającego innego niż nazwa użytkownika, np. adresu e-mail, dołącz |
|
Pusty element, który przyjmuje jeden z tych atrybutów:
|
|
Jeśli chcesz uwierzytelnić się przy użyciu atrybutu wyróżniającego innego niż nazwa użytkownika, takiego jak adres e-mail, skonfiguruj zasady LDAP tak, aby pobierały atrybut nazwy wyróżniającej z żądania (na przykład nazwa użytkownika), który służy do identyfikowania użytkownika w LDAP, pobierania adresu e-mail i uwierzytelniania użytkownika. Załóżmy, że LDAP zdefiniuje atrybut „mail” do przechowywania adresu e-mail:
|
Wyszukiwarka |
|
|
Element nadrzędny implementowanego przez Ciebie działania wyszukiwania. |
|
Zidentyfikując użytkownika za pomocą metadanych w żądaniu lub odpowiedzi, możesz użyć tego elementu, aby pobrać dodatkowe atrybuty nazwy użytkownika z LDAP. Jeśli na przykład żądanie zawiera adres e-mail użytkownika, a LDAP określa atrybut
To zapytanie wyszukuje w LDAP adres e-mail pasujący do adresu e-mail w żądaniu. Zasada może teraz pobierać dodatkowe atrybuty nazwy użytkownika za pomocą elementu Attributes. |
|
Za pomocą co najmniej jednego elementu Na przykład po zidentyfikowaniu użytkownika za pomocą zasady Wartości atrybutów to nazwy atrybutów wyróżniających określone w LDAP. <Attributes> <Attribute>address</Attribute> <Attribute>phone</Attribute> <Attribute>title</Attribute> </Attributes> |
Zastosowanie
Apigee Edge dla Private Cloud umożliwia wykorzystanie dostawcy LDAP w wywołaniach interfejsu API. Dzięki zasadom LDAP aplikacje mogą uwierzytelniać dane logowania do użytkowników przechowywanych w LDAP, a także możesz pobierać z usługi LDAP nazwy wyróżniające – 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
Zasada LDAP korzysta z zasobu LDAP utworzonego w Apigee Edge. Zasób LDAP udostępnia informacje o połączeniu z repozytorium LDAP.
Aby tworzyć zasoby LDAP i nimi zarządzać, użyj poniższego interfejsu API i ładunku:
API
Utwórz (POST
) zasób lub listę LDAP (GET
) wszystkich zasobów LDAP:
/v1/organizations/org_name/environments/environment/ldapresources
Aby uzyskać szczegółowe informacje o zasobie LDAP (GET
), Aktualizacji (POST
) i usuwaniu (DELETE
):
/v1/organizations/org_name/environments/environment/ldapresources/ldap_resource_name
Ładunek
Poniżej znajduje się 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 curl: Tworzenie zasobu LDAP
Poniższy przykład umożliwia utworzenie zasobu 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
Oto kody odpowiedzi HTML, które są zwracane w przypadku powodzenia lub niepowodzenia:
- Sukces: 200
- Błąd: 401
Korzystanie z niestandardowego dostawcy LDAP w Edge for Private Cloud
Używanie niestandardowego dostawcy LDAP
Apigee Edge for Private Cloud udostępnia dostawcę LDAP, który został już skonfigurowany pod kątem interakcji z zasadą LDAP. Jeśli jednak używasz niestandardowego dostawcy LDAP, musisz go włączyć, aby obsługiwał zasady 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 sekcji
<LdapConnectorClass>
konfiguracji zasad (następne sekcje) dodaj pełną i jednoznaczną nazwę klasy niestandardowego dostawcy LDAP. - Pobierz plik custom-ldap.jar_.zip. (jeśli trzeba, kliknij prawym przyciskiem myszy i wybierz Zapisz jako).
- Rozpakuj go.
- Dodaj do środowiska plik custom-ldap.jar i sprawdź, czy znajduje się on w ścieżce klasy.
- Utwórz zasób środowiska dla dostawcy LDAP. Nazwa zasobu środowiska jest używana w elemencie
<LdapResource>
zasady LDAP.
Korzystanie z pakietu SDK LDAP UnboundID dla Javy
Możesz używać pakietu SDK LDAP UnboundID z zasadami LDAP, ale najpierw musisz pobrać wersję 2.3.1 i dodać ją do każdej ścieżki klasy procesora wiadomości.
Aby używać pakietu SDK LDAP UnboundID z zasadą LDAP:
- Otwórz przeglądarkę i przejdź do repozytorium plików Sourceforge dla pakietu SDK LDAP UnboundID:
https://sourceforge.net/projects/ldap-sdk/files/
- Znajdź pakiet SDK w wersji 2.3.1 (SE lub Standard Edition) i pobierz plik ZIP z tą wersją. Na przykład pobierz plik „unboundid-ldapsdk-2.3.1-se.zip”.
- Wyodrębnij plik JAR z pliku ZIP pakietu SDK zgodnie z poniższym przykładem:
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 z elementem
-j
, chociaż jest to opcjonalne. - W każdym węźle procesora wiadomości:
- Skopiuj plik JAR do katalogu
/opt/apigee/edge-gateway/lib/thirdparty
procesora 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 do ścieżki klasy wszystkie biblioteki zewnętrzne z katalogu
/opt/apigee/edge-gateway/lib/thirdparty
. - Skopiuj plik JAR do katalogu
Zmienne przepływu
Poniżej znajdziesz zmienne zasad LDAP wypełnione 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 oraz atrybuty z wieloma wartościami. Argument indeks jest liczbą rozpoczynającą się od 1. Jeśli nie podasz numeru indeksu, domyślny numer indeksu to 1. Jeśli zasada zwraca adres, numer telefonu i adres e-mail, możesz pobrać pierwszy atrybut i wartość za pomocą tych zmiennych: ldap.policyName.search.result.attribute.address ldap.policyName.search.result.attribute.phone ldap.policyName.search.result.attribute.email Aby pobrać trzeci atrybut adresu z wyników wyszukiwania, możesz użyć tego kodu: ldap.policyName.search.result[3].attribute.address Jeśli atrybut ma 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 z zasad Edge mają spójny format opisany w Informacjach na temat 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. |