2020.06
2021.06
Anbindung von Shibboleth
Beschreibung der Anbindung an externe Authentifizierungs- und Authorisierungssysteme.
Shibboleth
Shibboleth ist ein vom Internet2/MACE entwickeltes Verfahren zur verteilten Authentifizierung und Autorisierung für
Webanwendungen und Webservices. Das Konzept von Shibboleth sieht vor, dass der Benutzer sich nur einmal bei seiner
Heimateinrichtung authentifizieren muss, um ortsunabhängig auf Dienste oder lizenzierte Inhalte verschiedener
Anbieter zugreifen zu können (engl. Single Sign-on). Shibboleth basiert auf einer Erweiterung des Standards SAML.
- Discovery-Service
- Hier wählt der Benutzer zu welcher Einrichtung er gehört und wird an dessen Identity-Provider weitergeleitet.
Der Discovery-Service ist optional.
- Identity-Provider:
- Hält die Namen, Passworter und Rollen der Benutzer. Idr. hat jede Universität einen eigenen Identity-Provider.
Benutzer melden sich hier an und bestimmen welche Informationen an den Service-Provider weitergeleitet werden
sollen.
- Service-Provider
- Stellt geschützte Resourcen zu verfügung. Leitet die Benutzer an den Discovery-Service oder an den
Identity-Provider weiter. Nimmt nach der Anmeldung die Benutzerinformationen entgegen.
Die MyCoRe-Anwendung ist ein Teil des Serviceproviders und nimmt die Benutzerinformationen entgegen. Der andere Teil
ist ein Apache-Plugin, welches die Shibboleth relevanten Requests verarbeitet und an den Tomcat weiterleitet.
Installieren des Serviceproviders
Als erstes muss man ein Apache-Plugin installieren, welches den Serivceprovider enthält: sudo apt-get install libapache2-mod-shib2
- /etc/shibboleth/
- Konfigurationsverzeichniss des Shibboleth Daemon
- /usr/sbin/shibd
- Shibboleth Daemon
- /var/log/shibboleth
- Logverzeichniss
- /etc/httpd/conf.d/shib.conf
- Apache spezifische Konfiguration für den Serviceprovider
Konfiguration des Service providers
Die wichtigste Konfigurationsdatei ist die
/etc/shibboleth/shibboleth2.xml
Diese Datei bestimmt welche Discovery-Services/Identity-Provider angesprochen werden und ist in mehrere Sektionen
aufgeteilt. Für die Konfiguration wird das Shibboleth-Wiki empfohlen.
Wir empfehlen folgende Konfiguration:
- ApplicationDefaults@attributePrefix
- "AJP_" - Die attribute werden nur per ajp weitergeleitet wenn das Prefix AJP_ gesetzt ist
- Sessions@handlerSSL
- true - Es werden nur Anfragen per SSL auf den Handler zugelassen
- Sessions@cookieProps
- https - Cookies werden nur für SSL Anfragen gesetzt
Die Sektion <ApplicationDefaults .../>
bestimmt die Grundkonfiguration des Demons.
Es ist in der nachfolgenden Sektion <ApplicationOverride .../>
möglich diese Konfiguration zu
erweitern, oder Teile davon zu Überschreiben.
Das Erweitern der Konfiguration bietet die Möglichkeit auf einem Server mehrere Anwendungen mit unterschiedlichen
Identity-Providern oder Discovery-Services zu betreiben.
Konfiguration von Apache
Nachdem für jede Anwendung ein ApplicationOverride konfiguriert ist, muss Apache konfiguriert werden.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
<Location /hagen/>
ProxyPass ajp://localhost:8038/hagen/
ProxyPassReverse ajp://localhost:8038/hagen/
Require all granted
</Location>
<Location /hagen/Shibboleth.sso>
SetHandler shib
ProxyPass !
ProxyPassReverse !
ShibRequestSetting applicationId hagen
</Location>
<Location /hagen/servlets/MCRShibbolethLoginServlet>
AuthType shibboleth
ShibRequestSetting requireSession 1
ShibRequestSetting applicationId hagen
Require valid-user
</Location>
|
Die erste Location ist die eigentliche MyCoRe-Anwendung welche per ProxyAJP an den Tomcat mit MyCoRe weitergeleitet
wird.
Die zweite Location ist der Service Provider und wird über das Apache-Plugin angesprochen. Das **ProxyPass !** und
**ProxyPassReverse !** verhindern das dieser Pfad an den Tomcat weitergereicht werden. Das **SetHandler** sagt dem
Apache das dass Apache-Plugin für diese Location benutzt werden soll. Die **applicationId** verweist auf dass
**ApplicationOverride/@id** welches in der shibboleth2.xml festgelegt wurde.
Die dritte Location schaltet die Authentifizierung mit Shibboleth ein. Wenn die URL `
/hagen/servlets/MCRShibbolethLoginServlet` aufgerufen wird, dann schaltet sich erst Apache ein, weil das `AuthType`
auf `shibboleth` gesetzt wurde, dann wird die Kontrolle an den Shibboleth-Daemon abgegeben. Dieser führt die
Authentifizierung aus und leitet anschließend an das `MCRShibbolethLoginServlet ` weiter und übergibt die
Informationen die beim Login vom Identity-Provider übermittelt wurden.
Anpassen der Realms.xml
Nachdem Apache Konfiguriert ist, muss die realms.xml
im Datenverzeichnis von MyCoRe angepasst
werden.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
<?xml version="1.0" encoding="UTF-8"?>
<realms local="local">
<realm id="local">
[...]
</realm>
<realm id="shibboleth" setable="false">
<label xml:lang="de">Shibboleth</label>
<label xml:lang="en">Shibboleth</label>
<login url="MCRShibbolethLoginServlet" redirectParameter="url">
<label xml:lang="de">Anmelden mit dem Login Ihrer Heimateinrichtung</label>
<label xml:lang="en">Login with your user credentials of your home institution</label>
<info>
<label xml:lang="de">
Falls unterstützt, müssen Sie sich ggf. nur einmalig anmelden.
</label>
<label xml:lang="en">
This login uses single-sign-on facilities provided by your home institution.
</label>
</info>
</login>
</realm>
<realm id="tu-ilmenau.de">
<label xml:lang="de">TU Ilmenau</label>
<label xml:lang="en">TU Ilmenau</label>
<attributeMapping>
<attribute name="userName" mapping="eppn"/>
<attribute name="realName" mapping="displayName" converter="org.urmel.dbt.utils.DisplayNameConverter"/>
<attribute name="eMail" mapping="mail"/>
<attribute name="roles" mapping="affiliation" separator=";">
<valueMapping name="employee">submitter</valueMapping>
<valueMapping name="member">reader</valueMapping>
</attribute>
</attributeMapping>
<passwordChangeURL>https://www.tu-ilmenau.de/unirz/it-service-desk/password/</passwordChangeURL>
</realm>
<realm id="uni-jena.de">
<label xml:lang="de">FSU Jena</label>
<label xml:lang="en">FSU Jena</label>
<attributeMapping>
<attribute name="userName" mapping="eppn"/>
<attribute name="realName" mapping="displayName" converter="org.urmel.dbt.utils.DisplayNameConverter"/>
<attribute name="eMail" mapping="mail"/>
<attribute name="roles" mapping="eduPersonAffiliation">
<valueMapping name="employee">submitter</valueMapping>
<valueMapping name="member">reader</valueMapping>
</attribute>
</attributeMapping>
<passwordChangeURL>https://portal.uni-jena.de/</passwordChangeURL>
</realm>
<realm id="uni-erfurt.de">
<label xml:lang="de">Universität Erfurt</label>
<label xml:lang="en">University Erfurt</label>
<attributeMapping>
<attribute name="userName" mapping="eppn"/>
<attribute name="realName" mapping="displayName" converter="org.urmel.dbt.utils.DisplayNameConverter"/>
<attribute name="eMail" mapping="mail"/>
<attribute name="roles" mapping="eduPersonAffiliation">
<valueMapping name="employee">submitter</valueMapping>
<valueMapping name="member">reader</valueMapping>
</attribute>
</attributeMapping>
<passwordChangeURL>https://idmweb.uni-erfurt.de/OAS</passwordChangeURL>
</realm>
</realms>
|
Um zu bewirken, dass der Benutzer beim Anlegen eines Dokument auch gespeichert wird
muss in den mycore.properties
noch folgendes Property gesetzt werden:
1
2
|
# can be used to persist transient user (shibboleth or ...)
MCR.EventHandler.MCRObject.110.Class=org.mycore.user2.events.MCRPersistTransientUserEventHandler
|
Anhand der Attribute die gemappt werden sieht man, was der IDP liefern muss.