Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung |
playground:playground [2016/07/14 10:06] – Martin Lunze | playground:playground [2021/08/19 12:37] (aktuell) – Ralf Paffrath |
---|
====== 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.\\ | |
Wir entfernen hier das Wort "Pooled" aus den class-Bezeichnungen und den connectionFactory-Referenzen und schon wird statt der PooledConnectionFactory die DefaultConnectionFactory benutzt. | |
| |
<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> | |