Zasada LDAP

Wyświetlasz dokumentację Apigee Edge.
Przejdź do dokumentacji Apigee X.
info

Co

Zasada LDAP zapewnia:

  • Uwierzytelnianie: dane logowania użytkownika podane w żądaniu są weryfikowane na podstawie danych logowania dostawcy LDAP. Zasada LDAP zapewnia dużą elastyczność w zakresie uwierzytelniania, umożliwiając używanie dowolnej wartości nazwy wyróżniającej wraz z hasłem, nawet jeśli ta wartość nie znajduje się w żądaniu. Załóżmy na przykład, że do uwierzytelniania musisz użyć adresu e-mail i hasła. Możliwe są te opcje:
    • Jeśli adres e-mail znajduje się w żądaniu, możesz go użyć wraz z hasłem do uwierzytelnienia LDAP uwierzytelniania.
    • Jeśli adres e-mail nie znajduje się w żądaniu, ale jest w nim inny atrybut nazwy wyróżniającej (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 / hasła do uwierzytelnienia.
  • Wyszukiwanie nazwy wyróżniającej: oprócz uwierzytelniania możesz też użyć zasady 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. 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 dostawcy LDAP takich jak administratorzy, użytkownicy organizacji i deweloperzy, zwłaszcza gdy dostęp do tokena OAuth jest niepotrzebny lub zbyt obciążający. Zasada ta jest też przeznaczona do pobierania metadanych nazwy domeny do użycia w przepływach proxy interfejsu API.

Możesz na przykład skonfigurować wywołanie interfejsu API tak, aby było wykonywane tylko wtedy, gdy użytkownik zostanie pomyślnie uwierzytelniony w LDAP, a następnie opcjonalnie pobrać atrybuty nazwy wyróżniającej użytkownika po pomyślnym uwierzytelnieniu.

Więcej informacji znajdziesz w tych artykułach:

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 pokazuje uwierzytelnianie u dostawcy LDAP. Zasada przekazuje nazwę użytkownika i hasło z żądania do LDAP w celu uwierzytelnienia.

Uwierzytelnianie za pomocą 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 za pomocą adresu 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 identyfikowania użytkownika, a następnie pobiera z LDAP adres, numer telefonu i stanowisko użytkownika. Pobrane atrybuty nazwy wyróżniającej są przechowywane w zmiennej. Zobacz "Zmienne specyficzne dla zasad zmienne".

Aby wyszukiwać w LDAP i pobierać atrybuty nazwy wyróżniającej, żądanie musi zawierać dane logowania administratora.

Dokumentacja elementów

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

Element

Opis

Ldap

Element nadrzędny z atrybutem name (nazwa), w którym możesz wpisać nazwę zasady.

LdapConnectorClass

Jeśli używasz zasady LDAP z niestandardowym dostawcą LDAP (nieudostępnianym przez Apigee), określ w pełni kwalifikowaną klasę oprogramowania sprzęgającego LDAP. Jest to klasa, w której zaimplementowano interfejs ExternalLdapConProvider Apigee.

LdapResource

Wpisz nazwę środowiska zasobu LDAP. Więcej informacji znajdziesz w artykule Create an LDAP resource.

BaseDN

Podstawowy poziom LDAP, pod którym znajdują się wszystkie Twoje dane. Na przykład w dostawcy LDAP Apigee wszystkie dane znajdują się pod adresem dc=apigee,dc=com.

  • ref: użyj, aby określić zmienną przepływu zawierającą wartość BaseDN, np. apigee.baseDN. ref ma pierwszeństwo przed jawną wartością BaseDN. Jeśli określisz zarówno ref, jak i value, pierwszeństwo ma ref. Jeśli ref nie zostanie rozpoznany w czasie działania, używana jest wartość.

Scope

  • obiekt: uwierzytelnianie lub wyszukiwanie odbywa się tylko na podstawowym poziomie LDAP.
  • onelevel: uwierzytelnianie lub wyszukiwanie odbywa się na poziomie poniżej podstawowego poziomu.
  • subtree (domyślnie): uwierzytelnianie lub wyszukiwanie odbywa się na poziomie podstawowym i w pełni rekurencyjnie poniżej poziomu podstawowego.

Uwierzytelnianie

Authentication

Element nadrzędny dla implementowanego przez Ciebie sposobu uwierzytelniania.

UserName

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

  • ref: odwołanie do nazwy użytkownika w żądaniu, np. request.header.username
  • value: sama nazwa użytkownika.

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 nazwa użytkownika znajduje się w żądaniu, ale chcesz uwierzytelnić użytkownika za pomocą atrybutu nazwy wyróżniającej innego niż nazwa użytkownika, np. adres e-mail, dodaj element SearchQuery , aby uzyskać adres e-mail użytkownika powiązany z hasłem. Zasada LDAP używa nazwy użytkownika do wysyłania zapytań do dostawcy LDAP o odpowiedni adres 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, np. request.header.password
  • value: samo zaszyfrowane hasło.

SearchQuery

Jeśli chcesz uwierzytelniać się za pomocą atrybutu nazwy wyróżniającej innego niż nazwa użytkownika, np. adres e-mail, skonfiguruj zasadę LDAP tak, aby pobierała z żądania atrybut nazwy wyróżniającej (np. nazwę użytkownika), który jest używany do identyfikowania użytkownika w LDAP, pobierania adresu e-mail i uwierzytelniania użytkownika.

Na przykład, jeśli LDAP definiuje atrybut „mail” do przechowywania adresu e-mail:

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

Szukaj

Search

Element nadrzędny dla implementowanych przez Ciebie zachowań związanych z wyszukiwaniem.

SearchQuery

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 mail do przechowywania adresów e-mail użytkowników, użyjesz tego ustawienia:

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

To zapytanie wyszukuje w LDAP adres e-mail pasujący do adresu e-mail w żądaniu, a zasada może teraz pobrać dodatkowe atrybuty nazwy wyróżniającej tego użytkownika za pomocą elementu Attributes (Atrybuty).

Attributes

Użyj co najmniej 1 elementu <Attribute>, aby zidentyfikować metadane nazwy wyróżniającej, które chcesz pobrać dla użytkownika. Wymagany jest co najmniej jeden atrybut.

Na przykład po tym, jak element SearchQuery zidentyfikuje użytkownika, zasada może pobrać atrybuty nazwy wyróżniającej użytkownika, takie jak adres, numer telefonu i stanowisko, jak pokazano w tym przykładzie.

Wartości atrybutów to nazwy atrybutów nazwy wyróżniającej 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 zasadzie 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 – 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, która może być używana przez proxy interfejsu API.

Tworzenie zasobu LDAP

Zasada LDAP korzysta 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

Pobierz szczegóły (GET), zaktualizuj (POST) lub usuń (DELETE) zasób LDAP:

/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 polecenia curl: tworzenie zasobu LDAP

Ten 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

Oto kody odpowiedzi HTML, które zasada zwraca w przypadku powodzenia lub niepowodzenia:

  • Sukces: 200
  • Błąd: 401

Używanie niestandardowego dostawcy LDAP w Edge for Private Cloud

Używanie niestandardowego dostawcy LDAP

Apigee Edge for Private Cloud zawiera dostawcę LDAP, który jest już skonfigurowany do współpracy z zasadą LDAP. Jeśli jednak używasz niestandardowego dostawcy LDAP, musisz włączyć obsługę 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 elemencie <LdapConnectorClass> konfiguracji zasady (następne sekcje), dodaj w pełni kwalifikowaną nazwę klasy niestandardowego dostawcy LDAP.
  3. Pobierz ten plik: custom-ldap.jar_.zip. (Może być konieczne kliknięcie prawym przyciskiem myszy i wybranie opcji Zapisz jako).
  4. Rozpakuj go.
  5. Dodaj plik custom-ldap.jar do środowiska i upewnij się, że znajduje się on w ścieżce klasy.
  6. Utwórz zasób środowiska dla dostawcy LDAP. Nazwę zasobu środowiska użyjesz w elemencie <LdapResource> zasady LDAP.

Używanie pakietu UnboundID LDAP SDK for Java

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

Aby używać pakietu UnboundID LDAP SDK z zasadą LDAP:

  1. Otwórz przeglądarkę i przejdź do repozytorium plików Sourceforge pakietu UnboundID LDAP SDK:
    https://sourceforge.net/projects/ldap-sdk/files/
  2. Znajdź wersję 2.3.1 (SE lub Standard Edition) pakietu SDK i pobierz plik ZIP tej wersji. Na przykład pobierz plik „unboundid-ldapsdk-2.3.1-se.zip”.
  3. 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ę katalogów za pomocą opcji -j, ale jest to opcjonalne.

  4. Na każdym węźle procesora komunikatów:
    1. Skopiuj plik JAR do katalogu procesora wiadomości /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 do ścieżki klasy wszystkie biblioteki innych firm w katalogu /opt/apigee/edge-gateway/lib/thirdparty.

    4. Uruchom ponownie procesor komunikatów:
      /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart

Zmienne przepływu

Oto zmienne zasady LDAP wypełniane przez element 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ś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

Jeśli chcesz pobrać trzeci atrybut adresu w wynikach wyszukiwania, użyj tego:

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

Jeśli atrybut ma wiele wartości (np. użytkownik ma kilka adresów e-mail adresów), możesz pobrać drugi adres e-mail 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.