Shibboleth-Authentifizierung

Die easydb unterstützt die Authentifizierung über Shibboleth 2.

Dabei gibt es die Möglichkeit, Shibboleth als alleinige oder als optionale Authentifizierungsmethode zu benutzen. Abhängig davon muss das Shibboleth-Modul im Apache konfiguriert sein. Bei alleiniger Benutzung (siehe SHIB2_MANDATORY) von Shibboleth kann der komplette easydb-Virtual-Host abgesichert werden, bei der Benutzung von verschiedenen Authentifizierungsmethoden ist eine Konfiguration in dieser Art notwendig:

<Location /loginshib2/>
    AuthType shibboleth
    require valid-user
    ShibRequireSession On
</Location>

Seit Version 4.0.159 muss hier /loginshib2/ konfiguriert sein. Vorherige Versionen der easydb erforderten die Konfiguration von /index.php/loginshib2/ statt /loginshib2/.

Bei dieser Konfiguration bekommen alle Nutzer, die sich erfolgreich am Shibboleth-Server angemeldet haben, Zugang zur easydb, wenn auch nur mit minimalen Rechten. Soll das nicht erlaubt sein, muss require weiter eingeschränkt werden (Apache-Dokumentation, Shibboleth-Dokumentation).

Rechtevergabe für Shibboleth-Nutzer

Die Rechtevergabe innerhalb der easydb erfolgt über den Nutzernamen und die Gruppenzuordnung.

Nutzerrechte können im Rechtemanager durch Angabe des genauen Nutzernamens des Shibboleth-Nutzers (z.B. mustermann@example.org) eingerichtet werden.

Wenn Sie eine easydb mit einer existierenden Nutzerbasis auf Shibboleth umstellen möchten, besteht die Möglichkeit, den Kontext (@example.org) vom Nutzernamen bei der Anmeldung zu entfernen, damit bestehende Rechtezuordnungen übernommen werden. Beachten Sie hierbei jedoch, dass die Nutzerbasis der easydb und im Shibboleth-System wahrscheinlich Unterschiede aufweist und es zu falschen Zuordnungen kommen kann.

Für die Zuordnung von Gruppen zu per Shibboleth authentifizierten Nutzern gibt es mehrere Möglichkeiten.

Shibboleth selbst bietet eine Reihe von Feldern an, die Autorisierungsinformationen enthalten können. So wird eine Unterteilung in Studenten und Mitarbeiter oder eine Zuordnung zu Fachbereichen über das System transportiert. Diese Gruppen im Shibboleth lassen sich analog zum LDAP-Modul den easydb-Gruppen zuordnen (Konfiguration siehe SHIB2_ATTR_GROUP).

Wenn die per Shibboleth transportierten Autorisierungsinformationen nicht ausreichend sind, können einzelnen Nutzern noch zusätzliche Gruppen zugeordnet werden. Hierzu muss das zusätzliche easydb-Gruppenmapping mit LOGIN_ADDITIONAL_GROUP_METHODS=easydb aktiviert werden und es muss innerhalb der easydb-Nutzerverwaltung ein Nutzer mit dem gleichen Nutzernamen (z.B. mustermann@example.org) angelegt werden. Diesem können dann wie gewohnt Gruppen zugeordnet werden, die bei einer Shibboleth-Anmeldung übernommen werden.

Ein einfaches Beispiel der Konfiguration mit Gruppenzuordnung finden Sie unter Beispielkonfiguration.

SHIB2_MANDATORY

Diese Variable legt fest, ob die alleinige Shib2-Authentifizierung benutzt werden soll, in der Vorgabe ist diese Option deaktiviert, zum Aktivieren ist Folgendes anzugeben:

SHIB2_MANDATORY=1

SHIB2_ATTR_USER_ID
SHIB2_REGEX_USER_ID
SHIB2_REPLACE_USER_ID

Die Variable SHIB2_ATTR_USER_ID legt fest, welches Attribut aus den von Shibboleth kommenden Daten den Login-Namen festlegt. Die Vorgabe ist eppn. Erst nach Angabe dieser Variable erscheint auf der easydb-Login-Seite der Link zur Shibboleth-Anmeldung.

Zusätzlich kann der Login-Name mit einem regulären Ausdruck noch angepasst werden. Um beispielsweise den Text @shibboleth ans Ende des von Shibboleth kommenden Login-Names zu hängen, ist folgende Konfiguration möglich:

SHIB2_ATTR_USER_ID=eppn
SHIB2_REGEX_USER_ID=/$/
SHIB2_REPLACE_USER_ID=@shibboleth

SHIB2_ATTR_DISPLAYNAME[_<FORMAT>]
SHIB2_REGEX_DISPLAYNAME
SHIB2_REPLACE_DISPLAYNAME

Die Variable SHIB2_ATTR_DISPLAYNAME legt das Feld für den Display-Namen fest. Die Vorgabe ist displayName.

Analog zu SHIB2_REGEX_USER_ID/SHIB2_REPLACE_USER_ID kann mit SHIB2_REGEX_DISPLAYNAME/SHIB2_REPLACE_DISPLAYNAME wieder ein regulärer Ausdruck zum Anpassen dieses Namens angewendet werden.

Seit Version 4.0.287 kann der Display-Name aus mehreren Attributen zusammengesetzt werden. Dazu kann SHIB2_ATTR_DISPLAYNAME_FORMAT verwendet werden, welches Vorzug vor SHIB2_ATTR_DISPLAYNAME hat:

SHIB2_ATTR_DISPLAYNAME_FORMAT=Vorname: "%(givenName)s" Nachname: "%(sn)s"

SHIB2_REGEX_DISPLAYNAME/SHIB2_REPLACE_DISPLAYNAME wird in dem Fall nicht angewendet.

SHIB2_ATTR_GROUP[_<n>]
SHIB2_GROUP_DIVIDER[_<n>]
SHIB2_WHERE_GROUP_SQL[_<FORMAT>]

Die Variable SHIB2_ATTR_GROUP definiert das Attribut, dass für die Gruppenzuordnung benutzt wird. Die Vorgabe ist affiliation.

Das entsprechende Feld wird mithilfe eines Trennzeichens, dass durch SHIB2_GROUP_DIVIDER festgelegt wird (Vorgabe ist ;), in die einzelnen Gruppen zerlegt.

Seit Version 4.0.287 können weitere Attribute als Quelle für Gruppen herangezogen werden. Die möglichen Variablen sind SHIB2_ATTR_GROUP_1 bis SHIB2_ATTR_GROUP_20. Wenn sich das Trennzeichen von SHIB2_GROUP_DIVIDER unterscheidet, können auch analog SHIB2_GROUP_DIVIDER_1 bis SHIB2_GROUP_DIVIDER_20 gesetzt werden.

Diese Gruppen werden dann (analog zum LDAP-Modul) über die Variable SHIB2_WHERE_GROUP_SQL den easydb-Gruppen zugeordnet, welche bei der SQL-Abfrage rauskommen, in der SHIB2_WHERE_GROUP_SQL den WHERE-Teil bestimmt. Dabei wird %g im Wert der Variablen durch den entsprechenden Gruppennamen von Shibboleth ersetzt. Die Vorgabe für SHIB2_WHERE_GROUP_SQL ist shib2_gruppe = %g.

Es können bei dem Matching mehr als eine easydb-Gruppe gefunden werden. Dem Benutzer werden dann alle gefundenen Gruppen zugeordnet. Seit Version 4.0.259.

Alternativ zu %g kann auch %G in SHIB2_WHERE_GROUP_SQL angegeben werden. In diesem Fall werden alle im Shibboleth gefundenen Gruppen auf einmal gegen die Datenbank abgeglichen. So können easydb-Gruppen z.B. nur in dem Fall zugeordnet werden, wenn der Shibboleth-Nutzer zwei bestimmt Gruppen aufweisen kann. Ein Konfigurationsbeispiel:

SHIB2_WHERE_GROUP_SQL=ARRAY[%G] @> regexp_split_to_array(shib2_gruppe, E',\\s*')

%G ist ab Version 4.0.287 verfügbar.

Statt SHIB2_WHERE_GROUP_SQL kann ab Version 4.0.287 auch SHIB2_WHERE_GROUP_SQL_FORMAT gesetzt werden. Hierbei kann das SQL-Statement mittels benannter Variablen erzeugt werden. Beispiel:

SHIB2_WHERE_GROUP_SQL_FORMAT=shib2_gruppe IN (%(affiliation:dbarr)s) OR shib2_gruppe = %(unscoped-affiliation:db)s

Die verwendeten Variablen (im Beispiel "affiliation" und "unscoped-affiliation") müssen hierbei auch durch SHIB2_ATTR_GROUP[_<n>] konfiguriert werden. Die verwendeten Escape-Funktionen ("db" oder "dbarr") garantieren die korrekte Notation innerhalb des SQL-Statements. Bei Verwendung von "dbarr" kann die Variable dabei mehrere komma-separierte Werte enthalten, bei "db" maximal einen Wert (den ersten, falls im Attribut mehr vorhanden sind).

SHIB2_ADDITIONAL_ATTRS

Diese Variable enthält eine kommaseparierte Liste von zusätzlichen Attributen, die beim Anmelden in der Datenbank gespeichert werden sollen. In der Voreinstellung ist diese Liste leer. Ein Beispiel wäre:

SHIB2_ADDITIONAL_ATTRS=Shib-Identity-Provider,Shib-Authentication-Instant,Shib-AuthnContext-Decl

SHIB2_NO_REDIRECT

Die konfigurierten Attribute werden aus der Server-Umgebung bezogen. Im FastCGI-Fall ist ihnen in der Praxis ein REDIRECT_ vorangestellt, was der Code Version 4.0.310 auch berücksichtigt. Ist das nicht der Fall, z.B. weil das System anders als üblich konfiguriert ist, lässt sich das Verhalten der easydb ab Version 4.0.310.3 auch so einstellen, dass nie REDIRECT_ vor der Attribut-Variablen erwartet wird:

SHIB2_NO_REDIRECT=1