LDAP-Richtlinie

Sie lesen gerade die Dokumentation zu Apigee Edge.
Zur Dokumentation zu Apigee X.
info

Was

Die LDAP-Richtlinie bietet Folgendes:

  • Authentifizierung: Die in der Anfrage angegebenen Nutzeranmeldedaten werden mit den Anmeldedaten im LDAP-Anbieter verglichen. Die LDAP-Richtlinie bietet Ihnen viel Flexibilität bei der Authentifizierung. Sie können jeden DN-Wert zusammen mit dem Passwort verwenden, auch wenn dieser DN-Wert nicht in der Anfrage enthalten ist. Angenommen, Sie müssen E‑Mail-Adresse und Passwort für die Authentifizierung verwenden. Folgende Optionen sind möglich:
    • Wenn die E‑Mail-Adresse in der Anfrage enthalten ist, können Sie sie einfach zusammen mit dem Passwort für die LDAP Authentifizierung verwenden.
    • Wenn die E‑Mail-Adresse nicht in der Anfrage enthalten ist, aber ein anderes DN-Attribut (z. B. die Telefonnummer), können Sie die Telefonnummer verwenden, um die entsprechende E‑Mail-Adresse aus LDAP abzurufen und sich dann mit E‑Mail-Adresse / Passwort zu authentifizieren.
  • Suche nach Distinguished Name (DN): Neben der Authentifizierung können Sie mit der LDAP-Richtlinie auch ein Nutzerattribut in der Anfrage identifizieren, z. B. die E‑Mail-Adresse, und eine Abfrage ausführen, mit der andere DN-Attribute für diesen Nutzer aus LDAP abgerufen werden. Der abgerufene DN wird in einer Variablen gespeichert.

Verwenden Sie die LDAP-Richtlinie, wenn der Zugriff auf geschützte Ressourcen auf Nutzer in Ihrem LDAP Anbieter beschränkt werden soll, z. B. auf Administratoren, Organisationsnutzer und Entwickler. Dies ist besonders dann sinnvoll, wenn der Zugriff auf OAuth-Tokens entweder unnötig oder zu aufwendig ist. Die Richtlinie wurde auch entwickelt, um Metadaten für Domainnamen abzurufen, die in API-Proxy-Abläufen verwendet werden können.

Sie können beispielsweise festlegen, dass ein API-Aufruf nur ausgeführt wird, wenn ein Nutzer erfolgreich bei LDAP authentifiziert wurde. Optional können Sie dann nach erfolgreicher Authentifizierung DN-Attribute (Domain Name) für den Nutzer abrufen.

Weitere Informationen finden Sie unter:

Beispiele

Authentifizierung mit Nutzername/Passwort

<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>

In diesem Beispiel wird die Authentifizierung bei einem LDAP-Anbieter gezeigt. Die Richtlinie übergibt Nutzername und Passwort aus der Anfrage zur Authentifizierung an LDAP.

Authentifizierung mit DN-Attribut

<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>

Diese Richtlinie ruft den DN des Nutzers mit der E‑Mail-Adresse im Anfrageheader ab und authentifiziert den Nutzer dann mit dem im Anfrageheader angegebenen Passwort bei LDAP.

LDAP durchsuchen

<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>

Diese Richtlinie verweist auf einen benutzerdefinierten LDAP-Anbieter. Sie verwendet die E‑Mail-Adresse im Anfrage header, um den Nutzer zu identifizieren, und ruft dann die Adresse, Telefonnummer und Position des Nutzers aus LDAP ab. Die abgerufenen DN-Attribute werden in einer Variablen gespeichert. Weitere Informationen finden Sie unter Richtlinienspezifische Variablen.

Um LDAP zu durchsuchen und DN-Attribute abzurufen, muss die Anfrage Administrator Anmeldedaten enthalten.

Elementverweis

Im Folgenden finden Sie Beschreibungen der Elemente und Attribute der LDAP-Richtlinie.

Element

Beschreibung

Ldap

Übergeordnetes Element mit einem Namensattribut, in dem Sie den Richtliniennamen eingeben können.

LdapConnectorClass

Wenn Sie die LDAP-Richtlinie mit einem benutzerdefinierten LDAP Anbieter verwenden (der nicht von Apigee bereitgestellt wird), geben Sie die voll qualifizierte LDAP-Connector-Klasse an. Das ist die Klasse, in der Sie die ExternalLdapConProvider -Schnittstelle von Apigee implementiert haben.

LdapResource

Geben Sie den Umgebungsnamen der LDAP-Ressource ein. Weitere Informationen finden Sie unter Create an LDAP-Ressource.

BaseDN

Die Basisebene von LDAP, unter der sich alle Ihre Daten befinden. Im LDAP-Anbieter von Apigee befinden sich beispielsweise alle Daten unter dc=apigee,dc=com.

  • ref: Verwenden Sie diese Option, um eine Ablaufvariable anzugeben, die den BaseDN-Wert enthält, z. B. „apigee.baseDN“. „ref“ hat Vorrang vor einem expliziten BaseDN-Wert. Wenn Sie sowohl „ref“ als auch „value“ angeben, hat „ref“ Priorität. Wenn „ref“ zur Laufzeit nicht aufgelöst werden kann, wird „value“ verwendet.

Scope

  • object: Die Authentifizierung oder Suche erfolgt nur auf der Basisebene von LDAP.
  • onelevel: Die Authentifizierung oder Suche erfolgt eine Ebene unter der Basis ebene.
  • subtree (Standard): Die Authentifizierung oder Suche erfolgt auf der Basisebene und vollständig rekursiv unter der Basisebene.

Authentifizierung

Authentication

Übergeordnetes Element für das von Ihnen implementierte Authentifizierungsverhalten.

UserName

Leeres Element, das eines der folgenden Attribute verwendet:

  • ref: Ein Verweis auf den Nutzernamen in der Anfrage, z. B. request.header.username
  • value: Der Nutzername selbst

Wenn Sie sich nicht mit einem Nutzernamen authentifizieren oder der Nutzername nicht in der Anfrage enthalten ist, müssen Sie dieses Element nicht einfügen.

Wenn der Nutzername in der Anfrage enthalten ist, Sie aber einen Nutzer mit einem anderen DN-Attribut als dem Nutzernamen authentifizieren möchten, z. B. mit der E‑Mail-Adresse, fügen Sie eine SearchQuery ein, um die E‑Mail-Adresse des Nutzers abzurufen die mit dem Passwort verknüpft ist. Die LDAP-Richtlinie verwendet den Nutzernamen, um den LDAP-Anbieter nach der entsprechenden E‑Mail-Adresse zu fragen, die dann für die Authentifizierung verwendet wird.

Password

Leeres Element, das eines der folgenden Attribute verwendet:

  • ref: Ein Verweis auf das Passwort in der Anfrage, z. B. request.header.password
  • value: Das verschlüsselte Passwort selbst

SearchQuery

Wenn Sie sich mit einem anderen DN-Attribut als dem Nutzernamen authentifizieren möchten, z. B. mit der E‑Mail-Adresse, konfigurieren Sie die LDAP-Richtlinie so, dass ein DN-Attribut aus der Anfrage abgerufen wird (z. B. der Nutzername), mit dem der Nutzer in LDAP identifiziert, die E‑Mail-Adresse abgerufen und der Nutzer authentifiziert wird.

Angenommen, in LDAP ist ein Attribut „mail“ zum Speichern der E‑Mail-Adresse definiert:

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

Suche

Search

Übergeordnetes Element für das von Ihnen implementierte Suchverhalten.

SearchQuery

Wenn Sie den Nutzer mit Metadaten in der Anfrage oder Antwort identifizieren, können Sie mit diesem Element zusätzliche DN-Attribute für den Nutzer aus LDAP abrufen. Wenn die Anfrage beispielsweise die E‑Mail-Adresse des Nutzers enthält und in Ihrem LDAP ein Attribut mail zum Speichern von E‑Mail-Adressen von Nutzern definiert ist, verwenden Sie die folgende Einstellung:

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

Mit dieser Abfrage wird in LDAP nach einer E‑Mail-Adresse gesucht, die mit der E‑Mail-Adresse in der Anfrage übereinstimmt. Die Richtlinie kann jetzt mit dem Element „Attributes“ zusätzliche DN-Attribute für diesen Nutzer abrufen.

Attributes

Verwenden Sie ein oder mehrere <Attribute> Elemente, um die DN-Metadaten zu identifizieren, die Sie für den Nutzer abrufen möchten. Mindestens ein Attribut ist erforderlich.

Nachdem die SearchQuery den Nutzer identifiziert hat, kann die Richtlinie beispielsweise DN-Attribute für den Nutzer abrufen, z. B. Adresse, Telefonnummer und die Position des Nutzers, wie im folgenden Beispiel gezeigt.

Attributwerte sind die in Ihrem LDAP definierten DN-Attributnamen.

<Attributes>
  <Attribute>address</Attribute>
  <Attribute>phone</Attribute>
  <Attribute>title</Attribute>
</Attributes>

Verwendungshinweise

Mit Apigee Edge for Private Cloud können Sie einen LDAP-Anbieter in API-Aufrufen nutzen. Mit der LDAP Richtlinie können Anwendungen Anmeldedaten anhand von in LDAP gespeicherten Nutzern authentifizieren und Sie können Distinguished Names (DNs) aus LDAP abrufen. Das sind die Metadaten oder Attribute, die mit jedem Nutzer verknüpft sind, z. B. E‑Mail-Adresse, Adresse und Telefonnummer. Der zurückgegebene DN wird in einer Variablen gespeichert, die vom API-Proxy weiter verwendet werden kann.

LDAP-Ressource erstellen

Die LDAP-Richtlinie verwendet eine LDAP-Ressource, die Sie in Apigee Edge erstellen. Eine LDAP-Ressource enthält die Verbindungsinformationen zu Ihrem LDAP-Repository.

Verwenden Sie die folgende API und Nutzlast, um LDAP-Ressourcen zu erstellen und zu verwalten:

API

LDAP-Ressource erstellen (POST) oder alle LDAP-Ressourcen auflisten (GET):

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

Details für eine LDAP-Ressource abrufen (GET), aktualisieren (POST) und löschen (DELETE):

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

Nutzlast

Im Folgenden finden Sie eine XML-Beispielnutzlast mit Verwendungshinweisen.

<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>

curl-Beispiel: LDAP-Ressource erstellen

Im folgenden Beispiel wird eine LDAP-Ressource mit dem Namen ldap1 erstellt.

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>'

Antwortcodes

Im Folgenden finden Sie die HTML-Antwortcodes, die die Richtlinie bei Erfolg oder Fehler zurückgibt:

  • Erfolg: 200
  • Fehler: 401

Benutzerdefinierten LDAP-Anbieter in Edge for Private Cloud verwenden

Benutzerdefinierten LDAP-Anbieter verwenden

Apigee Edge for Private Cloud enthält einen LDAP-Anbieter, der bereits für die Interaktion mit der LDAP-Richtlinie konfiguriert ist. Wenn Sie jedoch einen benutzerdefinierten LDAP-Anbieter verwenden, müssen Sie ihn so konfigurieren, dass er die LDAP-Richtlinie unterstützt. Gehen Sie dazu so vor:

  1. Implementieren Sie in Ihrer LDAP-Anbieterklasse die ExternalLdapConProvider-Schnittstelle.
    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. Fügen Sie in der <LdapConnectorClass> der Richtlinienkonfiguration (nächste Abschnitte) den voll qualifizierten Klassennamen Ihres benutzerdefinierten LDAP-Anbieters hinzu.
  3. Laden Sie diese Datei herunter: custom-ldap.jar_.zip. Möglicherweise müssen Sie mit der rechten Maustaste klicken und Speichern unter auswählen.
  4. Entpacken Sie die Datei.
  5. Fügen Sie die Datei „custom-ldap.jar“ Ihrer Umgebung hinzu und achten Sie darauf, dass sie sich im Klassenpfad befindet.
  6. Erstellen Sie eine Umgebungsressource für Ihren LDAP-Anbieter. Sie verwenden den Namen der Umgebungsressource im Element <LdapResource> der LDAP-Richtlinie.

UnboundID LDAP SDK für Java verwenden

Sie können das UnboundID LDAP SDK mit der LDAP-Richtlinie verwenden. Sie müssen jedoch zuerst Version 2.3.1 herunterladen und sie dem Klassenpfad jedes Nachrichtenprozessors hinzufügen.

So verwenden Sie das UnboundID LDAP SDK mit der LDAP-Richtlinie:

  1. Öffnen Sie einen Browser und rufen Sie das Sourceforge-Dateirepository für das UnboundID LDAP SDK auf:
    https://sourceforge.net/projects/ldap-sdk/files/
  2. Suchen Sie nach Version 2.3.1 (SE oder Standard Edition) des SDK und laden Sie die ZIP-Datei für diese Version herunter. Laden Sie beispielsweise „unboundid-ldapsdk-2.3.1-se.zip“ herunter.
  3. Extrahieren Sie die JAR-Datei aus der SDK-ZIP-Datei, wie im folgenden Beispiel gezeigt:
    unzip -j -d ~/tmp ~/Downloads/unboundid-ldapsdk-2.3.1-se.zip unboundid-ldapsdk-2.3.1-se/unboundid-ldapsdk-se.jar

    Mit diesem Befehl wird nur die JAR-Datei in das Verzeichnis „~/tmp“ extrahiert. Die Verzeichnisstruktur wird mit -j entfernt. Das ist jedoch optional.

  4. Auf jedem Message Processor-Knoten:
    1. Kopieren Sie die JAR-Datei in das Verzeichnis /opt/apigee/edge-gateway/lib/thirdparty des Nachrichtenprozessors.
    2. Erteilen Sie dem Apigee-Nutzer bei Bedarf die Berechtigung für die JAR-Datei, damit der Nachrichtenprozessor darauf zugreifen kann.
    3. Edge fügt alle Drittanbieterbibliotheken im /opt/apigee/edge-gateway/lib/thirdparty Verzeichnis dem Klassenpfad hinzu.

    4. Starten Sie den Message Processor neu:
      /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart

Ablaufvariablen

Im Folgenden finden Sie die LDAP-Richtlinienvariablen, die von einer SearchQuery ausgefüllt werden.

Variable

Beschreibung

ldap.policyName.execution.success

Nach Ausführung der Richtlinie enthält diese Ablaufvariable je nach Ergebnis den Wert „true“ oder „false“,

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

Das flexible Format dieser Variablen, insbesondere der Index, berücksichtigt mehrere Attribute sowie Attribute mit mehreren Werten. Der Index ist eine Zahl, die bei 1 beginnt. Wenn keine Indexnummer angegeben ist, ist die Standard Indexnummer 1.

Wenn die Richtlinie Adresse, Telefonnummer und E‑Mail-Adresse zurückgibt, können Sie das erste Attribut und den ersten Wert mit diesen Variablen abrufen:

ldap.policyName.search.result.attribute.address
ldap.policyName.search.result.attribute.phone
ldap.policyName.search.result.attribute.email

Wenn Sie das dritte Adressattribut in den Suchergebnissen abrufen möchten, verwenden Sie Folgendes:

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

Wenn ein Attribut mehrere Werte hat (z. B. wenn ein Nutzer mehrere E‑Mail Adressen hat), rufen Sie die zweite E‑Mail-Adresse aus den Ergebnissen so ab:

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

Fehlercodes

Von Edge-Richtlinien zurückgegebene Fehler folgen einem konsistenten Format, wie in der Fehlercode-Referenz beschrieben.

Für diese Richtlinie werden die folgenden Fehlercodes verwendet:

Fehlercode die Botschaft und
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.