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
Letzte Überarbeitung Beide Seiten der Revision
playground:playground [2016/07/14 10:01]
Martin Lunze
playground:playground [2016/07/14 10:32]
Martin Lunze
Zeile 1: Zeile 1:
 ====== PlayGround ====== ====== PlayGround ======
-===== LDAP-Verbindung ===== 
-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 10 Monaten