Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
de:shibsp_beispiele_nextcould [2020/04/06 13:12] Silke Meyerde:shibsp_beispiele_nextcould [2020/04/06 13:14] (aktuell) – gelöscht Silke Meyer
Zeile 1: Zeile 1:
-====== AAI-Login für Nextcloud ====== 
  
-Nextcloud bringt eine eigene SAML-Erweiterung mit, die aber nur zur Anbindung eines einzigen IdPs geeignet ist. Glücklicherweise hat diese Erweiterung aber einen Modus in dem per CGI-Environment-Variablen Authentifiziert wird. Damit wird die Authentifizierung an den Apache ausgelagert und dadurch kann die Shibboleth-SP-Software als Apache-Authentifizierungsmethode verwendet werden. 
- 
-Vorteile und Besonderheiten: 
- 
-  * für die 'normalen' User verwaltet Nextcloud keine lokalen Passwörter mehr 
-  * der initiale NC-Admin kann sich nach wie vor lokal anmelden, muss dazu aber eine spezielle URL nehmen:<code>https://HOST/index.php/login?direct=1</code> 
-  * neue AAI-User werden automatisch angelegt. Will man nicht alle AAI-User zulassen muss ausserhalb von Nextcloud eine Liste gepflegt werden: 
-    * idealerweise per SAML-Attribut (typischerweise "eduPersonEntitlement") aus einer Attribute-Authority 
-    * alternativ als Userliste im Apache 
-  * für jeden nicht-Browser-Client muss der User selber per initialem Browser-AAI-Login ein Security-Token erstellen 
- 
- 
-===== "SSO & SAML authentication"-App ===== 
- 
-  * als Nextcloud-Admin einloggen 
-  * unter "+Apps" --> "Integration" die Erweiterung "SSO & SAML authentication" aktivieren 
-  * unter "Settings" --> "Administration" --> "SSO & SAML authentication" die Alternative "Use Environment variable" auswählen 
-  * "Only allow authentication if..." NICHT auswählen 
-  * General --> "REMOTE_USER" (ist vorbelegt) 
-  * "Attribute mapping" --> "Show attribute mapping settings..." 
-    * erstes Feld "displayName" (ist vorbelegt) 
-    * zweites Feld "mail" (ist vorbelegt) 
- 
- 
- 
-===== Shibboleth-SP ===== 
- 
-==== DFN-AAI-Config ===== 
- 
-  * grundsätzliche DFN-AAI-Anbindung siehe https://doku.tid.dfn.de/de:shibsp 
-  * Kontrollieren, dass "eppn" als erstes/primäres Attribut an REMOTE_USER zugewiesen wird: 
- 
-<file xml /etc/shibboleth/shibboleth2.xml> 
- 
-   <ApplicationDefaults entityID="https://files-dev.hochschulverwaltung.de/shibboleth" 
-        REMOTE_USER="eppn subject-id pairwise-id persistent-id" 
-         
-</file> 
-==== Attribut-Mapping ==== 
- 
-Folgende Attribut-Mappings aktivieren falls nicht schon per Default aktiv: 
- 
-<file xml /etc/shibboleth/attribute-map.xml> 
- 
-    <Attribute name="urn:oid:1.3.6.1.4.1.5923.1.1.1.6" id="eppn"> 
-        <AttributeDecoder xsi:type="ScopedAttributeDecoder" caseSensitive="false"/> 
-    </Attribute> 
-     
-    <Attribute name="urn:oid:2.16.840.1.113730.3.1.241" id="displayName"/> 
-     
-    <Attribute name="urn:oid:0.9.2342.19200300.100.1.3" id="mail"/> 
-     
-</file> 
- 
-<code> 
-root@host:~# systemctl restart shibd 
-</code> 
- 
-<wrap tip>Nicht vergessen diese drei Attribute in der DFN-AAI-Metadatenverwaltung als "required" anzugeben damit die Idps diese Attribute freigeben!</wrap> 
- 
- 
-===== Apache ===== 
- 
-==== Grundlegende Konfiguration ==== 
- 
-Es wird nur die Login-Seite per Shibboleth geschützt (siehe https://github.com/nextcloud/user_saml/issues/243): 
- 
-<file apache /etc/apache2/sites-available/VHOST.conf> 
-<Location /index.php/apps/user_saml/saml/login> 
-   AuthType                          shibboleth 
-   ShibRequestSetting requireSession true 
-   <RequireAll> 
-     Require shib-attr eppn        ~ ^.+$ 
-     Require shib-attr displayName ~ ^.+$ 
-     Require shib-attr mail        ~ ^.+@.+$ 
-     Require                           valid-user 
-   </RequireAll>  
-</Location> 
-</file> 
- 
-<code> 
-root@host:~# systemctl reload apache2 
-</code> 
- 
-Damit wird ein AAI-Login möglich und (sofern der Nutzer die geforderten drei Attribute mitbringt) automatisch ein Nextcloud-Account angelegt. 
- 
-==== Einschränkung der Nutzergruppe ==== 
- 
-Eine Einschränkung des Nutzerkreises erfolgt typischerweise mithilfe des Berechtigungsattribute ("entitlement") welches für diesen AAI-Dienst aus einer Attribute-Authority kommen müsste. Existiert diese nicht kann der Kreis der berechtigten Nutzer z.B. über eine User-Liste im Apache eingeschränkt werden. Dabei muss unbedingt eine verständliche Fehlerseite konfiguriert werden die dem unberechtigten User eine Erklärung für die Ablehnung gibt: 
- 
-<file apache /etc/apache2/sites-available/VHOST.conf> 
-<Location /index.php/apps/user_saml/saml/login> 
-   AuthType                          shibboleth 
-   ShibRequestSetting requireSession true 
-   <RequireAll> 
-     Require shib-attr eppn        ~ ^.+$ 
-     Require shib-attr displayName ~ ^.+$ 
-     Require shib-attr mail        ~ ^.+@.+$ 
-     Require user                  userX@uni-ab.de userY@uni-cd.de 
-   </RequireAll> 
-   ErrorDocument 401 /info.php 
-</Location> 
- 
-# Error-Seite muss auch einen Shibboleth-Context haben damit 
-# dort die SAML-Attribute im CGI-Environment auftauchen! 
-Alias /info.php /var/www/vhosts/VHOST/dfn-info.php 
-<Location /info.php> 
-    AuthType shibboleth 
-    ShibRequestSetting requireSession true 
-    Require valid-user 
-</Location> 
-</file> 
- 
-<code> 
-root@host:~# systemctl reload apache2 
-</code> 
- 
-Dynamischer Beispielspielausschnitt für die Error-Seite wie sie in der Nextlcloud für die DFN-Nutzergruppe verwendet wird: 
- 
- 
-<file php /var/www/vhosts/VHOST/info.php> 
-<?php 
- 
-if (empty($_SERVER['displayName'])) { 
- $displayName = "Interessentin/Interessent"; 
-} else { 
- $displayName = $_SERVER['displayName']; 
-}; 
- 
-echo "<p class='hint'><h3>Sehr geehrte(r) "; print_r($displayName); echo ",</h3></p>\n"; 
-echo "<p class='hint'>dieser File-Sharing-Dienst steht nur Mitgliedern der Nutzergruppe 'XY'</a> 
-        zur Verfügung.</p>"; 
- 
-if (!empty($_SERVER['displayName']) && !empty($_SERVER['eppn']) && !empty($_SERVER['mail'])) { 
-        echo "<p class='hint'>Um Zugriff auf den Dienst zu bekommen registrieren Sie sich bitte 
-                unter Angabe Ihrer Netz-ID</p><center><h3>"; 
-        print_r($_SERVER['eppn']); 
-        echo "</h3></center><p class='hint'>bei der <a href=\"https://www.somedomain.de\">Nutzergruppe</a>.</p>"; 
-} else { 
-        echo "<p class='hint'>Falls Sie registriert sind und diese Fehlermeldung sehen, 
-                fehlen noch folgende Benutzerinformationen um diesen Dienst nutzen zu können:</p>"; 
- 
-        if (empty($_SERVER['displayName'])) { 
-                echo "<p class='hint'>Vor- und Nachname (\"displayName\") wurde nicht übertragen!</p>"; 
-        }; 
-        if (empty($_SERVER['eppn'])) { 
-                echo "<p class='hint'>Netz-Id (\"eduPersonPrincipalName\") wurde nicht übertragen!</p>"; 
-        }; 
-        if (empty($_SERVER['mail'])) { 
-                echo "<p class='hint'>E-Mail-Adresse (\"mail\") wurde nicht übertragen!</p>"; 
-        }; 
-}; 
- 
-?> 
- 
-</file> 
- 
-==== Logout ==== 
- 
-Bei der hier beschriebenen Konfiguration überlässt die Nextcloud-Software die Autentifizierung dem Webserver. Damit verschwindet aber der "Logout"-Menüpunkt in der Nextcloud-Oberfläche und der User kann sich nur abmelden indem er den Browser schliesst. Ein Logout kann aber der Shibboleth-SP übernehmen. Getriggert wird das Single-Logout durch Aufruf der Location 
- 
-<code> 
- https://VHOST/Shibboleth.sso/Logout 
-</code> 
- 
-FIXME: wie baut man das in die Nextcloud-Oberfläche ein? 
- 
-Dabei wird ein Single-Logout getriggert, d.h. der User wird nicht nur vom Nextcloud-Dienst abgemeldet sondern auch von allen anderen AAI-Diensten an denen er in diesem Moment eingelogged ist. Daher sollte unbedingt eine Nachfrage mit entsprechendem Hinweis an den User gestellt werden bevor das Logout aktiviert wird. 
- 
-FIXME: wie sieht so ein Code aus? 
- 
-===== IdP-Config ===== 
- 
-IdPs welche die Attribut-Infos in den DFN-AAI-Metadaten nicht auswerten müssen drei Attribute manuell freigeben: 
- 
- 
-<file xml /opt/shibboleth-idp/conf/attribute-filter.xml> 
- 
-<AttributeFilterPolicy id="hsvw-nextcloud"> 
- 
-     <PolicyRequirementRule xsi:type="Requester" value="https://files-dev.hochschulverwaltung.de/shibboleth" /> 
- 
-     <AttributeRule attributeID="eduPersonPrincipalName" permitAny="true"/> 
-     <AttributeRule attributeID="mail"                   permitAny="true"/> 
-     <AttributeRule attributeID="displayName"            permitAny="true"/> 
- 
-</AttributeFilterPolicy> 
- 
-</file> 
  • Zuletzt geändert: vor 4 Jahren