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.LDAPAuthenticationAccessDevice
s 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:
- anonymous Es findet keine Authentifizierung statt
- 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.
- 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 PersonLDAPAccessService
s 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
- Es dürfen keine Anführungszeichen verwendet werden
- Es können ausschließlich Standard Attribute der LDAP Datenbank verwendet werden.
- 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 PersonLDAPAccessService
s 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 PersonLDAPAccessService
s 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 PersonLDAPAccessService
s 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 objectClass
es könne nicht angegeben werden. Das bedeutet jedes angegebene Attribut wird für die Abfrage aller Objektklassen verwendet.