LDAP ohne Connection Pool

Gibt es Probleme bei der Verbindung mit dem LDAP-Server unter Verwendung eines Connection Pools, so kann man diesen mit folgenden Schritten deaktivieren.

Der IdP benutzt standardmäßig eine sogenannte PooledConnectionFactory. Das heißt, dass eine definierte Anzahl an Verbindungen zum LDAP-Dienst aufrecht erhalten wird und Authentifizierungen sofort stattfinden können (Performance-Verbesserung).

Wenn diese Verbindung beendet wird, so registriert Shibboleth dies und baut selbstständig eine neue auf. Dies kann man über ein paar Parameter in conf/ldap.properties (IdP 4.x) steuern. In der Konfigurationsdatei sehen Sie die (auskommentierten) Standardeinstellungen und können sie bei Bedarf verändern (Beispiel für IdP 4.x).

conf/ldap.properties
# LDAP pool configuration, used for both authn and DN resolution
#idp.pool.LDAP.minSize                          = 3
#idp.pool.LDAP.maxSize                          = 10
#idp.pool.LDAP.validateOnCheckout               = false
#idp.pool.LDAP.validatePeriodically             = true
#idp.pool.LDAP.validatePeriod                   = PT5M
#idp.pool.LDAP.validateDN                       =
#idp.pool.LDAP.validateFilter                   = (objectClass=*)
#idp.pool.LDAP.prunePeriod                      = PT5M
#idp.pool.LDAP.idleTime                         = PT10M
#idp.pool.LDAP.blockWaitTime                    = PT3S

Es kann dazu kommen, dass die Verbindung zum LDAP-Server zwar erhalten bleibt, jedoch in einer definierten Zeit keine Antwort zurück kommt. Unter Umständen können sich Nutzer*innen dann nicht mehr am IdP einloggen.

Ein passender Eintrag in den Logfiles sieht wie folgt aus:

WARN [net.shibboleth.idp.authn.impl.ValidateUsernamePasswordAgainstLDAP:175] - Profile Action ValidateUsernamePasswordAgainstLDAP: Login by centreon produced exception
org.ldaptive.LdapException: javax.naming.NamingException: LDAP response read timed out, timeout used:3000ms.
        at org.ldaptive.provider.ProviderUtils.throwOperationException(ProviderUtils.java:77)
Caused by: javax.naming.NamingException: LDAP response read timed out, timeout used:3000ms.
        at com.sun.jndi.ldap.Connection.readReply(Connection.java:502)

Um den Connection Pool im IdP 4.x abzuschalten, können Sie die Einstellung idp.authn.LDAP.disablePooling in ldap.properties auf den Wert true setzen.