|
|
# TBD
|
|
|
# Shibboleth Integration
|
|
|
|
|
|
## Themen die beschrieben werden müssen
|
|
|
### Architekturausbau nginx -> apache -> shibboleth -> django
|
|
|
|
|
|
* [ ] Architekturausbau nginx -> apache -> shibboleth -> django
|
|
|
* [ ] Warum dieses Setup?
|
|
|
* [ ] Anmeldung Service Provider (Verweise auf Installationsdokumentationen)
|
|
|
* [ ] Installation & Konfiguration Service Provider
|
|
|
* [ ] ShibUser Model für Django
|
|
|
#### Warum dieses Setup?
|
|
|
|
|
|
Wir haben den nginx Webserver als den wichtigsten Webserver gewählt. Einige Gründe dafür sind:
|
|
|
* Der Webserver muss viel Proxy Aufgaben übernehmen.
|
|
|
* Performance
|
|
|
* Nginx mit Gunicorn ist meistens 1. Wahl in der Community, wenn es um Python Webapplikationen geht.
|
|
|
|
|
|
Am Anfang des Projektes haben wir noch versucht Shibboleth direkt über nginx zu integrieren. Theoretisch ist dies auch möglich. Es sind aber sehr viele zusätzliche Schritte dafür nötig. Gründe, warum wir trotzdem den Apache Webserver für die Shibboleth Integration verwendet haben:
|
|
|
* Nginx muss mit zusätzlichen Anpassungen selbst kompiliert werden. (Nachteil im Betrieb wegen der Sicherheitsupdates)
|
|
|
* Shibboleth-sp muss ebenfalls neukompiliert werden
|
|
|
* Es werden zwei zusätzliche Dienste gebraucht, damit das Setup funktioniert. (Bei Apache ist es nur einer)
|
|
|
* Wir haben bereits ein anderes Proxy System an der FHNW, dass ein ähnliches Setup benutzt (nginx->apache->shibboleth)
|
|
|
|
|
|
### Installation & Konfiguration Service Provider
|
|
|
|
|
|
Die Firma Switch, die unter anderem die Schweizer Shibboleth Federation betreibt, bietet eine hervorragende, dynamische Dokumentation für Installation und Betrieb von Shibboeleth Service Providern. Die haben wir auch benutzt
|
|
|
|
|
|
[Shibboleth SP Installation](https://www.switch.ch/aai/guides/sp/installation/)
|
|
|
|
|
|
[Shibboleth SP Konfiguration](https://www.switch.ch/aai/guides/sp/configuration/)
|
|
|
|
|
|
### ShibUser Model für Django
|
|
|
|
|
|
Für das Django User Model für die Integration mit Django, haben wir zunächst einige Beispiele einer solchen Integration angeschaut. Bei den Beispielen gab es entweder zu wenig Dokumentation, sie waren zu komplex für unseren Usecase. Darum haben wir uns dafür entschieden das Modul unseren Bedürfnissen entsprechend, selbst zu schreiben.
|
|
|
|
|
|
Das Modul befindet sich im admintools Repo unter admintools/shibuser. Es verzichtet auf eine Eingabeform für Username und Password. Die Auth App wird getriggert, auf dem Root Verzeichnis des web0.fhnw.ch Servers. Das Login übernimmt das AAI (Weiterleitung auf aai-logon.fhnw.ch). Nach erfolgreichem Login und dem Erhalt allen nötigen Attribute, werden diese benutzt um einen lokalen Django User zu erstellen. Bei einem erneuten Login werden die Attribute überprüft und gegebenfalls aktualisiert. (Bsp. Telefonnummer)
|
|
|
|
|
|
Nach dem Login wird eine Djangosession erstellt, dann erfolgt die automatische Umleitung. Administratoren (die als solche in der Konfiguration erfasst worden sind) werden zur Backend admintools Applikation umgeleitet (/admin) und alle anderen Benutzer zum Admintools Frontend (/antrag).
|
|
|
|
|
|
### Weiterleitung der Attribute
|
|
|
|
|
|
Shibboleth Attribute werden zum Webserver über Umgebungsvariablen übermittelt. Diese Umgebungsvariablen gehen wegen der Proxyweiterleitung zur Django Applikation (da Prozessgebunden) verloren. Es gibt die Möglichkeit die Shibboleth Attribute direkt in den Response Header zu schreiben; diese Variante wird aber vom Shibboleth Konsortium nicht empfohlen (aus Sicherheitsgründen)
|
|
|
|
|
|
Um dieses Problem zu umgehen, schreiben wir die Attribute zwar in den Header, aber unsichtbar für den User (während dem Proxy Request) Apache web0.fhnw.ch zu v000153.adm.ds.fhnw.ch (django)
|
|
|
|
|
|
Wir haben hier noch eine Aussnahme. Die Angular App braucht User Informationen. Diese Information schreiben wir in den Response Header, aber als Unique ID. Diese ist teilweise anonymisiert. (Bsp: 2352135@fhnw.ch)
|
|
|
|
|
|
```
|
|
|
<Location />
|
|
|
ProxyPass http://localhost:8000/
|
|
|
ProxyPassReverse /
|
|
|
# Shibboleth
|
|
|
AuthType shibboleth
|
|
|
ShibRequestSetting requireSession 1
|
|
|
require shib-session
|
|
|
# Setting Response Header for Angular
|
|
|
PassEnv uniqueID
|
|
|
Header set X-Shib-uniqeID "%{uniqueID}e"
|
|
|
|
|
|
# Setting Request Header for the Django APP"
|
|
|
RequestHeader set X-Shib-Session-ID "%{Shib-Session-ID}e"
|
|
|
RequestHeader set X-Shib-uniqeID "%{uniqueID}e"
|
|
|
RequestHeader set X-Shib-mail "%{mail}e"
|
|
|
RequestHeader set X-Shib-givenName "%{givenName}e"
|
|
|
RequestHeader set X-Shib-surname "%{surname}e"
|
|
|
RequestHeader set X-Shib-telephoneNumber "%{telephoneNumber}e"
|
|
|
RequestHeader set X-Shib-entitlement "%{entitlement}e"
|
|
|
</Location>
|
|
|
```
|
|
|
Die genaue Beschreibung der Apache Konfiguration befindet sich unter [apache-on-web0](apache-on-web0)
|
|
|
|
|
|
## Architektur Skizze
|
|
|
|
... | ... | |