LDAP-Richtlinie

Sie sehen die Dokumentation zu Apigee Edge.
Zur Apigee X-Dokumentation
weitere Informationen

Was

Die LDAP-Richtlinie bietet Folgendes:

  • Authentifizierung: In der Anfrage angegebene Nutzeranmeldedaten werden mit den Anmeldedaten des LDAP-Anbieters abgeglichen. Die LDAP-Richtlinie bietet Ihnen bei der Authentifizierung ein hohes Maß an Flexibilität. Sie können zusammen mit dem Passwort jeden beliebigen DN-Wert verwenden, auch wenn dieser gewünschte DN-Wert nicht in der Anfrage enthalten ist. Angenommen, Sie müssen eine E-Mail-Adresse / ein 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 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. eine Telefonnummer) vorhanden ist, können Sie die Telefonnummer verwenden, um die entsprechende E-Mail von LDAP zu erhalten, und dann die E-Mail-Adresse bzw. das Passwort zur Authentifizierung verwenden.
  • DN-Suche (Distinguished Name): Zusätzlich zur Authentifizierung können Sie die LDAP-Richtlinie auch verwenden, um ein Nutzerattribut in der Anfrage zu identifizieren, z. B. eine E-Mail, und eine Abfrage durchzuführen, die andere DN-Attribute aus LDAP für diesen Nutzer abruft. Der abgerufene DN wird in einer Variablen gespeichert.

Verwenden Sie die LDAP-Richtlinie, wenn der Zugriff auf geschützte Ressourcen auf Nutzer bei Ihrem LDAP-Anbieter beschränkt werden sollte, z. B. Administratoren, Nutzer der Organisation und Entwickler. Das gilt insbesondere, wenn der OAuth-Tokenzugriff nicht erforderlich oder zu umfangreich ist. Die Richtlinie dient auch zum Abrufen von Domainnamen-Metadaten zur Verwendung in API-Proxy-Abläufen.

Sie können beispielsweise festlegen, dass ein API-Aufruf nur dann ausgeführt wird, wenn ein Nutzer erfolgreich über 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:

Samples

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

Dieses Beispiel bietet die Authentifizierung bei einem LDAP-Anbieter. Die Richtlinie übergibt den Nutzernamen und das Passwort aus der Anfrage zur Authentifizierung an das LDAP.

DN-Attributauthentifizierung

<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 anhand des LDAPs mit dem Passwort, das im Anfrageheader angegeben ist.

LDAP wird gesucht

<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. Die E-Mail-Adresse im Anfrageheader wird verwendet, um den Nutzer zu identifizieren. Anschließend werden Adresse, Telefonnummer und Titel des Nutzers aus dem LDAP abgerufen. Die abgerufenen DN-Attribute werden in einer Variablen gespeichert. Siehe „Richtlinienspezifische Variablen“.

Damit in LDAP gesucht und DN-Attribute abgerufen werden können, muss die Anfrage Administratoranmeldedaten enthalten.

Elementverweis

Im Folgenden finden Sie Beschreibungen der LDAP-Richtlinienelemente und -attribute.

Element

Beschreibung

Ldap

Übergeordnetes Element mit einem „name“-Attribut zum Eingeben des Richtliniennamens.

LdapConnectorClass

Wenn Sie die LDAP-Richtlinie mit einem benutzerdefinierten LDAP-Anbieter (nicht von Apigee bereitgestellt) verwenden, 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 LDAP-Ressource erstellen.

BaseDN

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

  • ref: Wird verwendet, um eine Flussvariable 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 der Verweis zur Laufzeit nicht aufgelöst wird, wird der Wert verwendet.

Scope

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

Authentifizierung

Authentication

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

UserName

Leeres Element mit einem der folgenden Attribute:

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

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

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

Password

Leeres Element mit einem der folgenden Attribute:

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

SearchQuery

Wenn Sie für die Authentifizierung ein anderes DN-Attribut als den Nutzernamen verwenden möchten, z. B. eine E-Mail-Adresse, konfigurieren Sie die LDAP-Richtlinie so, dass aus der Anfrage ein DN-Attribut (z. B. der Nutzername) abgerufen wird. Damit wird der Nutzer in LDAP identifiziert, die E-Mail abgerufen und der Nutzer authentifiziert.

Angenommen, LDAP definiert ein "mail"-Attribut zum Speichern der E-Mail-Adresse:

<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 dieses Element verwenden, um zusätzliche DN-Attribute für den Nutzer aus LDAP abzurufen. Wenn die Anfrage beispielsweise die E-Mail-Adresse des Nutzers enthält und Ihr LDAP ein mail-Attribut zum Speichern der E-Mail-Adressen von Nutzern definiert, verwenden Sie die folgende Einstellung:

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

Diese Abfrage sucht im LDAP nach einer E-Mail-Adresse, 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 anzugeben, die Sie für den Nutzer abrufen möchten. Mindestens ein Attribut ist erforderlich.

Nachdem der Nutzer durch SearchQuery identifiziert wurde, kann die Richtlinie beispielsweise DN-Attribute für den Nutzer abrufen, z. B. Adresse, Telefonnummer und Titel, 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>

Hinweise zur Verwendung

Mit Apigee Edge for Private Cloud können Sie einen LDAP-Anbieter in API-Aufrufen nutzen. Mit der LDAP-Richtlinie können Anwendungen Anmeldedaten gegenüber Nutzern authentifizieren, die in LDAP gespeichert sind. Außerdem können Sie Distinguished Names (DNs) aus LDAP abrufen, d. h. die Metadaten oder Attribute, die mit jedem Nutzer verknüpft sind, z. B. E-Mail-Adresse, Adresse und Telefonnummer. Der zurückgegebene DN wird zur weiteren Verwendung durch den API-Proxy in einer Variablen gespeichert.

LDAP-Ressource erstellen

Die LDAP-Richtlinie nutzt eine LDAP-Ressource, die Sie in Apigee Edge erstellen. Eine LDAP-Ressource stellt die Verbindungsinformationen zu Ihrem LDAP-Repository bereit.

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

API

Erstellen (POST) Sie eine LDAP-Ressource oder listen Sie alle LDAP-Ressourcen auf (GET):

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

Rufen Sie Details zum (GET), Aktualisieren (POST) und Löschen (DELETE) einer LDAP-Ressource ab:

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

Nutzlast

Es folgt ein Beispiel für eine XML-Nutzlast mit Kommentaren zur Verwendung.

<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 Misserfolg zurückgibt:

  • Erfolgreich: 200
  • Fehler: 401

Benutzerdefinierten LDAP-Anbieter in Edge für 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 den Anbieter aktivieren, damit er die LDAP-Richtlinie unterstützt. Das geht so:

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

UnboundID LDAP SDK für Java verwenden

Sie können das UnboundID LDAP SDK mit der LDAP-Richtlinie verwenden, aber Sie müssen zuerst Version 2.3.1 herunterladen und zu jedem Klassenpfad Ihres Message Processor hinzufügen.

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

  1. Öffnen Sie einen Browser und rufen Sie das Sourceforge-Datei-Repository 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 SDKs 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 wie im folgenden Beispiel aus der SDK-ZIP-Datei:
    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. Dabei wird die Verzeichnisstruktur mit -j gelöscht, obwohl dies optional ist.

  4. Auf jedem Message Processor-Knoten:
    1. Kopieren Sie die JAR-Datei in das Verzeichnis /opt/apigee/edge-gateway/lib/thirdparty des Message Processor.
    2. Erteilen Sie dem Apigee-Nutzer gegebenenfalls die Berechtigung für die JAR-Datei, damit der Nachrichtenprozessor darauf zugreifen kann.
    3. Edge fügt dem Klassenpfad alle Bibliotheken von Drittanbietern im Verzeichnis /opt/apigee/edge-gateway/lib/thirdparty 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 einem SearchQuery ausgefüllt werden.

Variable

Beschreibung

ldap.policyName.execution.success

Nachdem die Richtlinie ausgeführt wurde, enthält diese Flussvariable je nach Ergebnis den Wert „true“ oder „false“.

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

Das flexible Format dieser Variable, insbesondere der Index: Konten für mehrere Attribute sowie Attribute mit mehreren Werten. Der Index ist eine Zahl, die bei 1 beginnt. Wenn keine Indexnummer angegeben wird, ist die Standardindexnummer 1.

Wenn die Richtlinie die Adresse, die Telefonnummer und die 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 so aus den Ergebnissen ab:

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

Fehlercodes

Von Edge-Richtlinien zurückgegebene Fehler folgen einem einheitlichen 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.