Zasada LDAP

Przeglądasz dokumentację Apigee Edge.
Przejdź do Dokumentacja Apigee X.
informacje.

Co

Zasada LDAP zapewnia:

  • Uwierzytelnianie: sprawdzane są dane logowania użytkownika podane w żądaniu. z danymi logowania u dostawcy LDAP. Zasady LDAP zapewniają dużą elastyczność uwierzytelnianie, dzięki czemu można używać dowolnej wartości nazwy wyróżniającej wraz z hasłem, nawet jeśli ta wartość w żądaniu nie ma. Na przykład załóżmy, że chcesz użyć adresu e-mail / hasła do uwierzytelnianie. Oto możliwe opcje:
    • Jeśli w żądaniu znajduje się adres e-mail, możesz po prostu użyć go z hasłem do LDAP. uwierzytelnianie.
    • Jeśli w żądaniu nie ma adresu e-mail, ale jest inny atrybut nazwy wyróżniającej (na przykład numer telefonu), możesz użyć numeru telefonu, aby uzyskać odpowiedni adres e-mail z LDAP, a następnie użyć adresu e-mail / hasło do uwierzytelnienia.
  • Wyszukiwanie według nazwy wyróżniającej: oprócz uwierzytelniania możesz na używając zasady LDAP do zidentyfikowania atrybutu użytkownika w żądaniu, takiego jak adres e-mail, wykonaj zapytanie, które pobierze z LDAP inne atrybuty nazwy wyróżniającej dla danego użytkownika. Pobrana nazwa wyróżniająca to przechowywanych w zmiennej.

Użyj zasady LDAP, gdy dostęp do zabezpieczonych zasobów powinien być ograniczony do użytkowników w LDAP (np. administratorzy, użytkownicy w organizacji i deweloperzy) Dostęp z użyciem tokena OAuth jest zbędny lub zbyt duży. Te zasady mają również zastosowanie pobierania metadanych nazwy domeny do wykorzystania w przepływach serwera proxy interfejsu API.

Na przykład wywołanie interfejsu API może być wykonywane tylko po pomyślnym uwierzytelnieniu użytkownika w związku z LDAP. a następnie opcjonalnie pobrać atrybuty DN (Nazwa domeny) dla użytkownika po uwierzytelnianie się powiedzie.

Dodatkowe informacje:

Przykłady

Uwierzytelnianie przy użyciu 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 oferuje 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 nazwę wyróżniającą użytkownika wraz z adresem e-mail w nagłówku żądania, a następnie: uwierzytelnia użytkownika w katalogu LDAP przy użyciu 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 odnosi się do niestandardowego dostawcy LDAP. Używa adresu e-mail podanego w żądaniu w nagłówku do identyfikacji użytkownika, a następnie pobiera adres, numer telefonu i tytuł użytkownika LDAP. Pobrane atrybuty nazwy wyróżniającej są przechowywane w zmiennej. Więcej informacji znajdziesz w sekcji „Zależnie od zasad” ”.

Aby można było wyszukać katalog LDAP i pobrać atrybuty DN, żądanie musi zawierać nazwę administratora dane logowania.

Odwołanie do elementu

Poniżej znajdziesz opisy elementów i atrybutów zasad LDAP.

Element

Opis

Ldap

Element nadrzędny z atrybutem „name”, w którym należy wpisać nazwę zasady.

LdapConnectorClass

Gdy używasz zasady LDAP z niestandardowym serwerem LDAP dostawcy (niepodanego przez Apigee), określ w pełni kwalifikowaną klasę oprogramowania sprzęgającego LDAP. To klasa, w której zaimplementowano obiekt ExternalLdapConProvider Apigee za pomocą prostego interfejsu online.

LdapResource

Wpisz nazwę środowiska zasobu LDAP. Zobacz Tworzenie zasobu LDAP.

BaseDN

Podstawowy poziom LDAP, na którym znajdują się wszystkie Twoje dane. Na przykład w polu Dostawca LDAP Apigee: wszystkie dane są w domenie dc=apigee,dc=com.

  • ref: służy do określania zmiennej przepływu zawierającej wartość BaseDN, np. apigee.baseDN. Odwołanie ma pierwszeństwo przed konkretną wartością BaseDN. Jeśli określisz ref, jak i wartość, odsyłacz ma priorytet. Jeśli odsyłacz nie będzie mieć adresu w środowisku wykonawczym, używana jest wartość.

Scope

  • object (obiekt): uwierzytelnianie lub wyszukiwanie ma miejsce tylko na poziomie podstawowym LDAP.
  • onelevel: uwierzytelnianie lub wyszukiwanie odbywa się o jeden poziom poniżej podstawy. na poziomie 300%.
  • subtree (domyślnie): uwierzytelnianie lub wyszukiwanie odbywa się na poziomie podstawowym. i całkowicie rekurencyjnie poniżej podstawy.

Uwierzytelnianie

Authentication

Element nadrzędny implementowanego sposobu uwierzytelniania.

UserName

Pusty element, który przyjmuje jeden z tych atrybutów:

  • ref: odniesienie do nazwy użytkownika w prośbie, np. request.header.username
  • value: nazwa użytkownika.

Jeśli nie uwierzytelniasz się za pomocą nazwy użytkownika lub jeśli w polu nie musisz uwzględniać tego elementu.

Jeśli w żądaniu podana jest nazwa użytkownika, ale chcesz uwierzytelnić użytkownika za pomocą atrybutu DN inne niż nazwa użytkownika, np. adres e-mail, dołącz SearchQuery, aby uzyskać adres e-mail użytkownika. powiązane z hasłem. Zasada LDAP używa nazwy użytkownika do wysyłania zapytań do dostawcy LDAP dla odpowiedniego adresu e-mail, który jest następnie używany do uwierzytelniania.

Password

Pusty element, który przyjmuje jeden z tych atrybutów:

  • ref: odwołanie do hasła w żądaniu, takie jak request.header.password
  • value: samo zaszyfrowane hasło.

SearchQuery

Jeśli chcesz uwierzytelnić się przy użyciu atrybutu DN innego niż nazwa użytkownika, takiego jak adres e-mail, skonfigurować zasadę LDAP tak, aby pobierała atrybut nazwy wyróżniającej z żądania (na przykład nazwę użytkownika), która służy do identyfikowania użytkownika w katalogu LDAP, pobierania wiadomości e-mail i uwierzytelniania użytkownika.

Na przykład, zakładając, że LDAP definiuje „pocztę”, atrybut do przechowywania adresu e-mail:

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

Szukaj

Search

Element nadrzędny zaimplementowanego przez Ciebie działania związanego z wyszukiwaniem.

SearchQuery

Identyfikując użytkownika za pomocą metadanych w żądaniu lub odpowiedzi, można użyć tego pobiera z serwera LDAP dodatkowe atrybuty wyróżniające użytkownika. Na przykład, jeśli plik zawiera adres e-mail użytkownika, a w interfejsie LDAP – atrybut mail do przechowywania adresów e-mail użytkowników, należy użyć następującego ustawienia:

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

To zapytanie wyszukuje w LDAP adres e-mail pasujący do adresu e-mail w żądaniu, a następnie zasady mogą teraz pobierać dodatkowe atrybuty DN dla danego użytkownika za pomocą atrybutów .

Attributes

Użyj co najmniej jednego elementu <Attribute> do określić metadane nazwy wyróżniającej, które chcesz pobrać dla użytkownika. Co najmniej 1 atrybut jest

Na przykład po zidentyfikowaniu użytkownika parametr SearchQuery mogą teraz pobierać atrybuty nazwy wyróżniającej, takie jak adres, numer telefonu zgodnie z poniższym przykładem.

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 dla Private Cloud pozwala korzystać z dostawcy LDAP w wywołaniach interfejsu API. Za pomocą protokołu LDAP zasad, aplikacje mogą uwierzytelniać dane logowania na kontach użytkowników przechowywanych w katalogu LDAP. pobiera z serwera LDAP nazwy wyróżniające – metadane lub atrybuty powiązane z np. adres e-mail, adres pocztowy i numer telefonu. Zwrócona nazwa wyróżniająca jest przechowywana w zmiennej przez do dalszego użycia 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 utworzyć zasoby LDAP i nimi zarządzać, użyj poniższego interfejsu API i ładunku:

Interfejs API

Utwórz (POST) zasób LDAP lub listę (GET) wszystkich zasobów LDAP:

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

Uzyskaj szczegółowe informacje o zasobie LDAP (GET), aktualizowaniu (POST) i usuwaniu (DELETE) zasobu LDAP:

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

Ładunek

Poniżej znajduje się przykładowy ładunek XML z komentarzami dotyczącymi wykorzystania.

<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 pokazuje 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 podano kody odpowiedzi HTML zwracanych przez zasadę w przypadku powodzenia lub niepowodzenia:

  • Sukces: 200
  • Błąd: 401

Korzystanie z niestandardowego dostawcy LDAP w Edge dla Private Cloud

Za pomocą Dostawca LDAP

Apigee Edge dla Private Cloud ma dostawcę LDAP, którego konfiguracja i interakcji z zasadami LDAP. Jeśli jednak korzystasz z niestandardowego dostawcy LDAP, musisz włączyć dostawcy obsługującego zasady LDAP. Aby to zrobić:

  1. 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();
    }
  2. W sekcji <LdapConnectorClass> konfiguracji zasad (następne sekcje) dodaj pełną i jednoznaczną nazwę klasy niestandardowego dostawcy LDAP.
  3. Pobierz ten plik: custom-ldap.jar_.zip. Możliwe, że trzeba będzie kliknąć prawym przyciskiem myszy i wybrać Zapisz jako.
  4. Rozpakuj go.
  5. Dodaj plik custom-ldap.jar do swojego środowiska i upewnij się, że znajduje się on w ścieżce klasy.
  6. Utwórz zasób środowiska dla dostawcy LDAP. Za pomocą zasobu środowiska name w elemencie <LdapResource> zasady LDAP.

Korzystanie z Pakiet SDK LDAP dla języka Java UnboundID

Możesz używać pakietu SDK LDAP UnboundID z zasadą LDAP, ale najpierw musisz pobrać wersję 2.3.1 i dodać go do każdej ścieżki klas procesora wiadomości.

Aby użyć pakietu SDK LDAP bez identyfikatora UnboundID z zasadą LDAP:

  1. Otwórz przeglądarkę i przejdź do repozytorium plików Sourceforge dla pakietu SDK LDAP UnboundID:
    https://sourceforge.net/projects/ldap-sdk/files/
  2. 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”.
  3. Wyodrębnij plik JAR z pliku ZIP pakietu SDK, zgodnie z przykładem poniżej:
    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 katalog za pomocą funkcji -j, chociaż jest to opcjonalne.

  4. W każdym węźle procesora wiadomości:
    1. Skopiuj plik JAR do Katalog /opt/apigee/edge-gateway/lib/thirdparty.
    2. W razie potrzeby przyznaj użytkownikowi Apigee uprawnienia do pliku JAR, aby procesor wiadomości mógł uzyskać do niego dostęp.
    3. Edge dodaje wszystkie biblioteki innych firm do /opt/apigee/edge-gateway/lib/thirdparty do ścieżki klasy.

    4. Ponownie uruchom procesor wiadomości:
      /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart

Zmienne przepływu

Poniżej podano zmienne zasad LDAP wypełniane przez zasadę SearchQuery.

Zmienna

Opis

ldap.policyName.execution.success

Po wykonaniu zasady ta zmienna procesu zawiera wartość „true” (prawda). lub „false”, w zależności od wyniku.

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

Elastyczny format tej zmiennej, indeks w konkretne: uwzględnia wiele atrybutów, jak również atrybuty z wieloma atrybutami . Indeks to liczba, która zaczyna się od 1. Jeśli nie podasz numeru indeksu, domyślnie zostanie użyty numer indeksu to 1.

Jeśli zasady zawierają adres, numer telefonu i adres e-mail, możesz pobrać pierwszy atrybut i wartości przy użyciu 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 w wynikach wyszukiwania, użyj tego:

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

Atrybut miał wiele wartości (na przykład użytkownik ma kilka adresów e-mail). adresy), otrzymasz drugi adres e-mail z wyników podobnych do tych:

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

Kody błędów

Błędy zwracane przez zasady Edge mają spójny format opisany w dokumentacji kodu 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.