LDAPAccessService

Ein LDAPAccessService ist für die Verbindung zum LDAP und die Query zur Abfrage von Daten verantwortlich. Sie beinhaltet die Konfigurationen, die benötigt werden, um sich mit dem LDAP zu verbinden und entsprechende Queries auszuführen. Zum Instanziieren dieses Services wird eine com.top_logic.base.dsa.ldap.ServiceProviderInfo benötigt, die das Konfigruationsobjekt darstellt und alle benötigten Parameter für die Verbindung zum LDAP Server beinhaltet. Im Falle des com.top_logic.base.security.device.ldap.LDAPAuthenticationAccessDevices ist immer com.top_logic.base.dsa.ldap.PersonLDAPAccessService der entsprechend verwendete LDAPAccessService, der noch einige weitere Konfigurationen insbesondere zur Filterung von Benutzergruppen, Benutzern und Benutzerattriibuten bietet.

Notwendige Konfigurationen

provider-url

Typ: String

Um eine Verbindung zu den LDAP Servern herstellen zu können, wird eine URL des Directory Servers des LDAPs benötigt. Diese beginnt mit ldap:// bei einer ungesichternen Verbindung oder mit ldaps:// bei Verbindung über Secure Sockets Layer (SSL). Anschließend folgen der Hostanme sowie der Port:

ldap[s]://hostname:port

Die Domain, die für die LDAP Verbindung benötigt wird, wird aus dem Hostnamen erschlossen und muss daher nicht mehr angegeben werden.

master-principal

Typ: String

Der Loginname des Masteraccounts , der zum Herstellen einer Verbindung zwischen der Anwendung und dem LDAP Dienst verwendet wird. Der Name hat folgendes Format:

Benutzername@LDAPDomain

master-credential

Typ: String

Das Passwort des Masteraccounts, das zum Herstellen einer Verbindung zwischen der Anwendung und dem LDAP Dienst verwendet wird. TODO: Verschlüsselung?

base-dn

Typ: String

Der Base DN (Distinguished Name siehe LDAP) ist ein Eintrag im Verzeichnis des LDAPs von dem aus die Suche gestartet werden soll. Alle benötigten Benutzergruppen und Benutzer müssen sich innerhalb dieses Verzeichnisses befinden.

Bei einem leeren Eintrag startet die Suche bei ROOT.

Zusätzliche Konfigurationen

context-factory

Typ: String
Default: com.sun.jndi.ldap.LdapCtxFactory

Bevor auf LDAP zugegriffen werden kann, muss ein initialer Kontext definiert werden, der den Einstiegspunkt eines Namespaces definiert. Das liegt daran, dass alle Methoden auf einem Verzeichnisdienst relativ zu einem Kontext ausgeführt werden. Für LDAP kann standardmäßig LdapCtxFactory verwendet werden.

authentication-type

Typ: String
Default: simple

In LDAP wird die Authendifizierung in der bind Operation durchgeführt. Es gibt drei Typen der Authentifizierung:

  1. anonymous Es findet keine Authentifizierung statt
  2. simple Zur Authentifizierung wird der Distinguished Name (DN) des benutzers sowies das Passwort im Klartext verwendet. Eine sichere Verbindung zum Beipspiel über SSL wird hierbei empfohlen.
  3. SASL Mit dieser Optionen können durch Leerzeichen separierte SASL (Simple Authentication and Security Layer) Mechanismen verwendet werden. Ein SASL Mechanismus wird durch seinen Internet Assigned Numbers Authority (IANA)-regsirtierten Mechanismennamen angegeben.

security-protocol-type

Typ: String

Der security-protocol-type definiert, welches Sicherheitsprotokoll für die LDAP Verbindung genutzt werden soll. Um zum Beispiel SSL zu benutzen, muss der Wert ssl angegeben werden. Falls kein Wert gesetzt wird, wird das Sicherheitsprotoll durch die provider-url bestimmt. Beinhaltet diese ldaps://, dann wird SSL verwendet (siehe provider-url).

referral

Typ: String

Ein Referral ist eine Art Alias mit einem oder mehreren LDAP URLs, die auf Objekte in Verzeichnissen verweisen, die sich unter Umständen auch auf einem anderen Server befinden. Dadurch ist es möglich, ein LDAP Verzeichnis auf mehrere Server zu verteilen oder auch dasselbe Objekt mit unterschiedlichen Namen anzusprechen.

Ein Referral ist ein Eintrag im LDAP Verzeichnis und besitzt die Objektklasse referral, sowie mindetens ein Attribut mit dem Namen ref und einer LDAP URL. Die URLs beinhalten dabei Hostanamen, Port und den DN des Objekts.

TODO: Was genau wird da jetzt konfiguriert?

filter

Typ: String

filter ist eine Konfiguration des PersonLDAPAccessServices und wird dazu verwendet die zu importierenden Daten zu filtern. Üblicherweise wird er dazu verwendet, um bestimmte Objektklassen (zum Beispiel Benutzer) zu filtern.

Die Kriterien des Filters können mit Hilfe folgender Operatoren definiert werden:

Regel Schreibweise
Gleichheit (attribute=abc)
Negierung (!(attribute=abc))
Existenz (attribute=*)
Nichtexistenz (!(attribute=*))
Größer als (attribute>=abc)
Kleiner als (attribute<=abc)
Wildcards (attribute=*abc*)
UND (&(objectCategory=abc)(objectClass=abc)(sAMAccountName=abc))
ODER (|(objectCategory=abc)(objectClass=abc)(sAMAccountName=abc))

Sonderzeichen

Die Folgenden Sonderzeichen können nicht ohne weiteres für den Filter verwendet werden und müssen entsprechend ersetzt werden:

Sonderzeichen Ersatz
( \28
) \29
& \26
| \7c
= \3d
> \3e
< \3c
~ \7e
* \2a
/ \2f
\ \5c

Weitere Regeln

  1. Es dürfen keine Anführungszeichen verwendet werden
  2. Es können ausschließlich Standard Attribute der LDAP Datenbank verwendet werden.
  3. Boolean Attribute müssen in Großbuchstaben gesucht werden (TRUE/FALSE)

Beispiele

Alle Einträge der Objektklasse Person, deren Loginname nicht leer ist:

(&(objectClass=Person)(samAccountName=*))

Alle Einträge der Objektklasse Person, deren Loginname nicht leer ist und die zur Benutzergruppe top-logic gehören (siehe base-dn für die Beschreibung der Abkürzungen):

(&(objectClass=Person)(samAccountName=*)(memberOf=CN=top-logic,OU=BOS,DC=BOS,DC=local))

Hinweis: Es ist üblich, Benutzergruppen mit Hilfe des Filters und des Attributs memberOf zu filtern. In TopLogic gibt es jedoch noch die Alternative, access-groups zu verwenden.

access-groups

Typ: List<NamedConfigMandatory>

access-groups sind eine Konfiguration des PersonLDAPAccessServices und definieren die Benutzergruppen, die zum Importieren von Benutzern in TopLogic berücksichtigt werden sollen. Sie bilden eine Alternative zu der Option, Benutzergruppen mit memberOf bereits im Filter abzufragen.

Wenn keine access-groups angegeben werden, wird auschschließlich der Filter verwendet, um Benutzereinträge zu ermitteln.

Es empfiehlt sich pro Benutzergruppe ein SecurityDevice zu konfigurieren. Dadurch können pro Benutzergruppe eigene Konfigurationen vorgenommen und auch nach dem Import in TopLogic Benutzer den ursprünglichen Benutzergruppen zugeordnet werden.

Beispiele

Benutzer der Gruppe top-logic:

CN=top-logic,OU=BOS,DC=BOS,DC=local

parse-nested-groups

Typ: boolean
Default: false

parse-nested-groups ist eine Konfiguration des PersonLDAPAccessServices und definiert ob die Benutzerdaten von verschachtelte Gruppen, also Gruppen die Mitglieder in anderen Gruppen sind, ebenfalls geparsed werden sollen. true bedeutet, dass die Gruppen rekursiv aufgelöst werden und nur Obergruppe angegeben werden muss, wenn man auch alle Benutzereinträge der Gruppen unterhalb der Obergruppe erhalten will. Das verhindert Redundanzen, da Gruppen, die gleichzeitig Untergruppen haben mehrfach aufgenommen werden würden.

available-attributes

Typ: String
Default: Alle Attribute

available-attributes ist eine Konfiguration des PersonLDAPAccessServices und eine Liste von LDAP Attributen, die beim Abfragen der Benutzereinträge beachtet werden sollen. Die Attribute müssen durch Komma separiert werden ohne Leerzeichen.

Außerdem müssen die Attribute den Attributnamen des Fremdsystems entsprechen. Wenn Attribute angegeben werde, werden ausschließlich diese abgefragt. Daher muss die Liste vollständig sein und es dürfen keine technischen Attribute wie beispielsweise objectClass vergessen werden. Wird hingegen kein Attribut angegeben, dann werden alle Attribute abgefragt.
Attribute für spezifische objectClasses könne nicht angegeben werden. Das bedeutet jedes angegebene Attribut wird für die Abfrage aller Objektklassen verwendet.