Dies ist eine alte Version des Dokuments!


Enhanced Client and Proxy (ECP)

ECP ist im IdP 3.x out-of-the box aktiv.

Achten Sie nur darauf dass das ECP-SSO-Binding des IdPs in den DFN-AAI-Metadaten auch angegeben ist:

Fehlt dies, finden ECP-Clients den IdP nicht wenn Sie sich anmelden wollen.

Zum Testen eignet sich das vom CILogon Projekt bereitgestellte Testscript 'testecp.sh'.

Siehe auch die Dokumentation im Shibboleth Wiki.

Ob die IdP-seitigen Voreinstellungen für den ECP-Support ausreichen, hängt letztlich vom Verhalten der eingesetzten Clients ab, siehe hierzu die Dokumentation im Shibboleth Wiki.

Die Im Moment gängigen BW-Sync&Share-Clients kommen mit obiger ECP-Variante leider nicht zurecht. Der ECP-Endpunkt muss für diese Clients noch explizit mit Basic-Auth geschützt werden. Dies kann mithilfe von Apache oder Tomcat gemacht werden, wobei die Apache variante aus unserer Sicht deutlich simpler ist:

ECP-Endpoint per Basic-Auth schützen:

/etc/apache2/sites-available/idp.hochschule-XY.de.conf
LDAPTrustedGlobalCert CA_BASE64 /etc/ssl/certs/T-TeleSec_GlobalRoot_Class_2.pem
<VirtualHost *:443>
  ServerName              idp.hochschule-XY.de:443
  ...
 
  # ECP-Config für Sync&Share-Clients
  <Location /idp/profile/SAML2/SOAP/ECP>
    AuthType Basic
    AuthName "idp.hochschule-XY.de - ECP profile"
    AuthBasicProvider ldap
    AuthLDAPURL "ldaps://ldap.hochschule-XY.de/ou=people,dc=hochschule-xy,dc=de?uid?sub"
    AuthLDAPBindDN "cn=idp,cn=systemusers,dc=hochschule-xy,dc=de"
    AuthLDAPBindPassword "geheim007"
    Require valid-user
  </Location>
</VirtualHost>

Authentifizierung per LDAP im Apache aktivieren:

root@idp:~# a2enmod authnz_ldap
root@idp:~# systemctl reload apache2

Da dieser Endpunkt weltweit erreichbar sein muss können hier auch Brute-Force-Passwort-Angriffe auftreten. Diesen sollten ebenfalls mithilfe von fail2ban begegnet werden, siehe die fail2ban-Seite in diesem Wiki.

1. web.xml (unter /edit-webapp/WEB-INF bearbeiten):
Die beiden Blöcke am Ende ent-kommentieren: „Uncomment to use container managed authentication“ und „Uncomment if you want BASIC auth managed by the container“

2. Context Fragment in Tomcat-Konfiguration anpassen.
Das sieht dann ungefähr so aus (appName, Pfade etc. ggf. anpassen):

/etc/tomcat8/Catalina/localhost/idp.xml
<Context docBase="/opt/shibboleth-idp/war/idp.war"
         privileged="true"
         antiResourceLocking="false"
         unpackWAR="true"
         swallowOutput="true">
  <Realm className="org.apache.catalina.realm.JAASRealm" appName="ShibUserPassAuth"/>
</Context>

3. Tomcat den Pfad zur JAAS login.config als Startparameter mitgeben (unter Debian in /etc/default/tomcat8):

/etc/default/tomcat8
JAVA_OPTS=" ... -Djava.security.auth.login.config=file:/opt/shibboleth-idp/login.config
..."

4. /opt/shibboleth-idp/login.config

ACHTUNG: die Java-Klasse ist eine andere wie bei der gewohnten login.config des IdP 2.x !!

/opt/shibboleth-idp/login.config
ShibUserPassAuth {
   org.ldaptive.jaas.LdapLoginModule required
      ldapUrl="..."
      ssl="true"
      bindDn="..."
      bindCredential="..."
      baseDn="..."
      userFilter="uid={user}"
      logCredentials="false"
   ;
};

Wer die ECP-Unterstützung auf einzelne SPs einschränken möchte (nicht empfohlen, aber falls jemand ein Szenario kennt in dem das sinnvoll ist, bitte melden ;-), muss in /opt/shibboleth-idp/conf/relying-party.xml im Abschnitt DefaultRelyingParty die Referenz auf das Bean SAML2.ECP auskommentieren und in der Liste der RelyingPartyOverrides eine Konfiguration für diese SPs hinzufügen. Das funktioniert analog zur eingeschränkten Freigabe der PersistentID.
Hier ein Beispiel für bwIDM:

/opt/shibboleth-idp/conf/relying-party.xml
<bean id="shibboleth.DefaultRelyingParty" parent="RelyingParty">
  <property name="profileConfigurations">
    <list>
        <bean parent="Shibboleth.SSO" 
              p:postAuthenticationFlows="#{{'terms-of-use', 'attribute-release'}}"
              p:includeAttributeStatement="true" />
          <ref bean="SAML1.AttributeQuery" />
          <ref bean="SAML1.ArtifactResolution" />
          <bean parent="SAML2.SSO"
                p:nameIDFormatPrecedence="urn:oasis:names:tc:SAML:2.0:nameid-format:transient" 
                p:postAuthenticationFlows="#{{'terms-of-use', 'attribute-release'}}" />
          <ref bean="SAML2.Logout" />
          <ref bean="SAML2.ArtifactResolution" />
    </list>
  </property>
</bean>
 
<util:list id="shibboleth.RelyingPartyOverrides">
 
 <bean parent="RelyingPartyByTag">
   <constructor-arg name="candidates">
     <list>
        <bean parent="TagCandidate" c:name="http://macedir.org/entity-category"
              p:values="http://aai.dfn.de/category/bwidm-member"/>
     </list>
   </constructor-arg>
   <property name="profileConfigurations">
     <list>
        <ref bean="SAML2.ECP" />
        <ref bean="SAML2.AttributeQuery" />
        <bean parent="SAML2.SSO" 
              p:postAuthenticationFlows="#{{'terms-of-use', 'attribute-release'}}"
              p:nameIDFormatPrecedence="#{{'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent', 'urn:oasis:names:tc:SAML:2.0:nameid-format:transient'}}"
                   />
        <ref bean="SAML2.Logout" />
        <ref bean="SAML2.ArtifactResolution" />
     </list>
   </property>
 </bean>
 
</util:list>
  • Zuletzt geändert: vor 3 Jahren