Zasada LDAP

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:

Przykłady

Uwierzytelnianie za pomocą nazwy użytkownika / hasła

<Ldap name="4GLdapPo>licy<"
   Ld>apRes<ourceldap1/Ld>apRe<source
   Auth>enticati<on
       UserName ref="request.he>ader.use<rname"/
       Password ref=">request.<heade>r.passw<ord&qu>ot;/
   <    Scopesubtree/Scope
   ><    Bas>e<DN ref="apigee.baseDN"/B>aseDN< !-- default is> d<c=api>gee,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="LdapPo>licy<"
   Ld>apRes<ourceldap1/Ld>apRe<source
   Auth>enticati<on
       Password ref="request.he>ader.pas<sword">/
       SearchQuerymail={<request.head>er.mail}</Sear>chQuery<
     >  Scopes<ubtree/Scope
       BaseDN>< ref=&q>u<ot;apigee.baseDN"/BaseDN !-- >defau<lt is dc=apigee>,d<c=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="LdapPo>licy&<quot;
    !-- using a custom LDAP p>rovid<er --
    LdapConn>ectorClasscom.custom.ldap.<MyProvider/LdapConn>ector<Class
    Ld>apReso<urceMyLdap/Ld>apRes<ource<>/span>
    Searc<h
        BaseDN ref="><;apigee>.<baseDN"/BaseDN !-- default is> dc=apige<e,dc=com -->
        SearchQuerymail={<request.head>er.mail}/<SearchQuer>y
        Att<ributes
 >       <    Attrib>uteaddress/At<tribute
 >     <      Attr>ibutephone/At<tribute
 >     <      Attr>ibutetitl<e/Attribute>
        </Attr><ibutes>
<        Scope/S‘cope !-’- d>efaul<t is su>b<tree >--
    /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

Ldap

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

LdapConnectorClass

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 ExternalLdapConProvider Apigee.

LdapResource

Wpisz nazwę środowiska zasobu LDAP. Więcej informacji znajdziesz w artykule Tworzenie zasobu LDAP.

BaseDN

Podstawowy poziom LDAP, w którym znajdują się wszystkie Twoje dane. Na przykład w przypadku dostawcy LDAP Apigee wszystkie dane znajdują się w 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 parametr ref, jak i value, parametr ref ma pierwszeństwo. Jeśli odwołanie nie zostanie rozpoznane w czasie działania, używana jest wartość.

Scope

  • object: uwierzytelnianie lub wyszukiwanie odbywa się tylko na poziomie podstawowym LDAP.
  • onelevel: uwierzytelnianie lub wyszukiwanie odbywa się na poziomie o 1 niższym od poziomu podstawowego.
  • 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 sposobu uwierzytelniania, który wdrażasz.

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 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 SearchQuery, aby uzyskać adres e-mail użytkownika powiązany z hasłem. Zasady LDAP używają 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ć 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:

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

Szukaj

Search

Element nadrzędny dla implementowanego przez Ciebie działania związanego 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żyj 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 zasady mogą teraz pobierać dodatkowe atrybuty nazwy wyróżniającej użytkownika za pomocą elementu Attributes.

Attributes

Użyj co najmniej 1 elementu <Attribute>, aby określić metadane DN, które chcesz pobrać dla użytkownika. Wymagany jest co najmniej 1 atrybut.

Na przykład po tym, jak SearchQuery zidentyfikuje użytkownika, zasada może pobrać atrybuty DN użytkownika, takie jak adres, numer telefonu i stanowisko użytkownika, jak pokazano w poniższym przykładzie.

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="l>dap<1"
  >Conne<ction>
    Ho<sts
      !-- port is optional: defaults to 389 for ldap:// and 636 for l>daps://< --
      Host >port=&q<uot;6>36&qu<ot;foo>.com/<Host
    />Hosts<
    SSLEna>b<ledfalse/SSLEnabled !-- optional, >defau<lts to >f<alse --
> <   Version3/Version !-- optio>nal, <defaults to 3->-
    <Authentications>i<mple/Authentication !-- optional, only> simp<le supported --
  >  ConnectionPr<oviderjndi|unboundi>d</ConnectionProv>ider <!-- required >--
    ServerSetTypesingle|<round robin|fa>i<lover/ServerSetType !-- not ap>plica<ble for jndi --
    !-- If using a custom LDAP provider, the fully> qual<ified class: --
  >  LdapConnectorClasscom.cu<stom.ldap.MyProvide>r/L<dapConnecto>rCl<ass
  /Connection
  Connec>t<Pool enabled="true" !-- enabled is> opti<onal, d>efaul<ts to tr>u<e --
    Timeout30000/Timeout !-- optional, in milliseco>nds; <if not >se<t, no ti>m<eout --
    Maxsize50/Maxsize !-- optional; if >not s<et, no m>ax< connecti>o<ns --
    Prefsize30/Prefsize !-- optiona>l; if< not set><, no pref> <size --
    Initsize/Initsize !-- optional>; if <not set,>< defaults> <to 1 --
    Protocol/Protocol !-- optional; if not s>et,< defaults to> &#<39;ss>l pla<in>' --
  /ConnectPool
  A<dmi>n
   < DNcn=ma>nager,<dc=apigee>,dc<=com/D>N<
    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:passwor<d -d \
  'LdapResourc>e nam<e="ld>ap1&quo<t;
  >  Conne<ctio>n
     < Host>s
     < Hostf>oo.com/<Host
     > /Hos<ts
      SS>LEnable<dfalse/>S<SLEnable>d
     < Version3/Vers>ion
  <    Authenticat>ionsimp<le/Authentication
>      Con<nectionProviderunbo>undid/C<onnectionProv>ider
      <ServerSetTyper>ound <robin/Serve>rSetT<ype
    /Connection
    Co>nnectPo<ol enab>led=&<quot;tru>e"<
      >Ti<meout300>00/Time<out
    >  <Maxsize50>/Maxsiz<e
      ><Prefsize3>0/Prefs<ize
    ><  Initsiz>e/Ini<tsize
      >Proto<col/P>rotocol<
 >   /ConnectPool
    Admin
 <   >  DNcn=<manager,>dc=api<gee,dc=co>m/DN
<      >Pas<swordsecret/P>assword
    /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ć:

  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. <LdapConnectorClass> konfiguracji zasad (w następnych sekcjach) dodaj pełną 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.

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:

  1. Otwórz przeglądarkę i przejdź do repozytorium plików Sourceforge dla 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 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, 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.

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