Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
playground:playground [2016/07/14 10:00]
Martin Lunze
playground:playground [2018/11/30 14:09] (aktuell)
waleczek@dfn-cert.de
Zeile 1: Zeile 1:
 ====== PlayGround ====== ====== PlayGround ======
-===== LDAP-Verbindung ===== +test
-Die aktuelle IdP-Version (3.2.1) basiert auf [[http://​www.ldaptive.org/​index.html|Ldaptive]] und benutzt standardmäßig eine sogenannte [[http://​www.ldaptive.org/​docs/​guide/​connections.html|PooledConnectionFactory]]. +
-Das heist im Speziellen, dass Shibboleth eine definierte Anzahl an Verbindungen zum LDAP-Dienst aufrecht erhält. +
-Vorteil dabei ist, dass zum Zeitpunkt des Logins eines Nutzers nicht erst eine Verbindung zum LDAP aufgebaut werden muss, sondern dieser sich ohne Verzögerung sofort authentifizieren kann. (Performance-Verbesserung) +
- +
-Wenn aus welchen Gründen auch immer diese Verbindung beendet wird, so registriert Shibboleth dies und baut selbstständig eine neue auf. +
-Dies kann z.B. auftreten wenn der LDAP-Server die Verbindungen nach einer bestimmten "​idleTime"​ beendet. +
-Im Großen und Ganzen kann man dies alles über ein paar [[https://​wiki.shibboleth.net/​confluence/​display/​IDP30/​LDAPAuthnConfiguration#​LDAPAuthnConfiguration-Properties][Parameter]] unter conf/​ldap.properties steuern. +
- +
-<file xml 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 ​                  = 300 +
-#​idp.pool.LDAP.prunePeriod ​                     = 300 +
-#​idp.pool.LDAP.idleTime ​                        = 600 +
-#​idp.pool.LDAP.blockWaitTime ​                   = 3000 +
-#​idp.pool.LDAP.failFastInitialize ​              = false +
-</​file>​ +
- +
-Nun kann es in Einzelfällen jedoch dazu kommen, dass die Verbindung zwar erhalten bleibt, jedoch in einer definierten Zeit keine Antwort vom LDAP zurück kommt. (z.B. bei erhöhtem Load) +
-Dies führt letztendlich dazu, dass sich Nutzer nicht mehr am IdP einloggen können wenn dieser die maximale Anzahl an Verbindungen erreicht hat. +
- +
-Ältere Versionen vom IdP haben hingegen keine Verbindungen offen gehalten, sondern diese erst geöffnet, wenn sich ein Nutzer einloggt. +
-Die maginale Verzögerung beim Aufbau der Verbindungen sollte aus Sicht des Nutzers nicht zu spüren sein und spätestens dann vertretbar sein, wenn solch ein Problem-Fall eintritt. +
- +
-Um nun zu diesem Verhalten zu wechseln müssen lediglich zwei kleine Änderungen in der conf/​authn/​ldap-authn-config.xml getätigt werden. +
- +
-<file xml conf/​authn/​ldap-authn-config.xml>​ +
-<!-- ... --> +
- +
-<!-- Authentication handler --> +
-    <bean id="​authHandler"​ class="​org.ldaptive.auth.BindAuthenticationHandler"​ p:​connectionFactory-ref="​bindConnectionFactory"​ /> +
-<!-- +
-    <bean id="​authHandler"​ class="​org.ldaptive.auth.PooledBindAuthenticationHandler"​ p:​connectionFactory-ref="​bindPooledConnectionFactory"​ /> +
---> +
-    <bean id="​bindPooledConnectionFactory"​ class="​org.ldaptive.pool.PooledConnectionFactory"​ p:​connectionPool-ref="​bindConnectionPool"​ /> +
-    <bean id="​bindConnectionPool"​ class="​org.ldaptive.pool.BlockingConnectionPool"​ parent="​connectionPool"​ +
-        p:​connectionFactory-ref="​bindConnectionFactory"​ p:​name="​bind-pool"​ /> +
-    <bean id="​bindConnectionFactory"​ class="​org.ldaptive.DefaultConnectionFactory"​ p:​connectionConfig-ref="​bindConnectionConfig"​ /> +
-    <bean id="​bindConnectionConfig"​ parent="​connectionConfig"​ /> +
- +
-<!-- ... --> +
- +
-<!-- Bind Search Configuration --> +
-    <bean name="​bindSearchAuthenticator"​ class="​org.ldaptive.auth.Authenticator">​ +
-        <​constructor-arg index="​0"​ ref="​bindSearchDnResolver"​ /> +
-        <​constructor-arg index="​1"​ ref="​authHandler"​ /> +
-    </​bean>​ +
-    <bean id="​bindSearchDnResolver"​ class="​org.ldaptive.auth.SearchDnResolver"​ p:​baseDn="​%{idp.authn.LDAP.baseDN}"​ +
-        p:​subtreeSearch="​%{idp.authn.LDAP.subtreeSearch:​false}"​ p:​userFilter="​%{idp.authn.LDAP.userFilter}"​ +
-        p:​connectionFactory-ref="​bindSearchConnectionFactory"​ /> +
-<!-- +
-    <bean id="​bindSearchDnResolver"​ class="​org.ldaptive.auth.PooledSearchDnResolver"​ p:​baseDn="​%{idp.authn.LDAP.baseDN}"​ +
-        p:​subtreeSearch="​%{idp.authn.LDAP.subtreeSearch:​false}"​ p:​userFilter="​%{idp.authn.LDAP.userFilter}"​ +
-        p:​connectionFactory-ref="​bindSearchPooledConnectionFactory"​ /> +
---> +
-    <bean id="​bindSearchPooledConnectionFactory"​ class="​org.ldaptive.pool.PooledConnectionFactory"​ +
-        p:​connectionPool-ref="​bindSearchConnectionPool"​ /> +
-    <bean id="​bindSearchConnectionPool"​ class="​org.ldaptive.pool.BlockingConnectionPool"​ parent="​connectionPool"​ +
-        p:​connectionFactory-ref="​bindSearchConnectionFactory"​ p:​name="​search-pool"​ /> +
-    <bean id="​bindSearchConnectionFactory"​ class="​org.ldaptive.DefaultConnectionFactory"​ p:​connectionConfig-ref="​bindSearchConnectionConfig"​ /> +
-    <bean id="​bindSearchConnectionConfig"​ parent="​connectionConfig"​ p:​connectionInitializer-ref="​bindConnectionInitializer"​ /> +
-    <bean id="​bindConnectionInitializer"​ class="​org.ldaptive.BindConnectionInitializer"​ p:​bindDn="​%{idp.authn.LDAP.bindDN}">​ +
-        <​property name="​bindCredential">​ +
-            <bean class="​org.ldaptive.Credential">​ +
-                <​constructor-arg value="​%{idp.authn.LDAP.bindDNCredential}"​ /> +
-            </​bean>​ +
-        </​property>​ +
-    </​bean>​ +
- +
-<!-- ... --> +
-</​file>​+
  • Zuletzt geändert: vor 3 Jahren