Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
| de:shibidp3storage [2019/07/04 15:56] – [PersistentId Konfiguration] Wolfgang Pempe | de:shibidp3storage [2021/05/03 13:51] (aktuell) – veralteten Inhalt gelöscht Silke Meyer | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| - | ====== Server-Side-Storage, | ||
| - | |||
| - | Per default werden Informationen zu Sessions, User Consent (insbesondere bzgl. Attributfreigabe) und Persistent IDs client-seitig in Cookies abgelegt. Dies kann aber nur als initiale " | ||
| - | |||
| - | **Darüber hinaus kann nur auf diese Weise sichergestellt werden, dass bei Attribute Queries (SP fragt anhand eines Name Identifiers direkt beim IdP Nutzerdaten ab), die Entscheidungen des/der Nutzers/ | ||
| - | ===== Installation Datenbanksoftware ===== | ||
| - | |||
| - | ==== MySQL ==== | ||
| - | |||
| - | === Debian 8 === | ||
| - | |||
| - | <code bash> | ||
| - | root@idp:~# apt-get install mysql-server mysql-client libmysql-java | ||
| - | </ | ||
| - | |||
| - | Damit der Tomcat die MySQL-Java-Library beim Starten einliest (d.h. der IdP sie dann verwenden kann), wird diese üblicherweise in / | ||
| - | |||
| - | <code bash> | ||
| - | root@idp:~# ln -s / | ||
| - | </ | ||
| - | |||
| - | Starten Sie Tomcat neu um die neuen Einstellungen zu aktivieren (dabei Logdateien mitverfolgen!): | ||
| - | |||
| - | <code bash> | ||
| - | root@idp:~# service tomcat8 restart | ||
| - | </ | ||
| - | |||
| - | ==== PostgreSQL ==== | ||
| - | |||
| - | Siehe hierzu einstweilen die [[https:// | ||
| - | |||
| - | <code bash> | ||
| - | root@idp:~# apt-get install libpostgresql-jdbc-java | ||
| - | </ | ||
| - | |||
| - | === RHEL === | ||
| - | |||
| - | <code bash> | ||
| - | yum install postgresql-server postgresql | ||
| - | </ | ||
| - | |||
| - | ===== Datenbank-Konfiguration ===== | ||
| - | |||
| - | Zunächst ist eine logische Datenbank zu erstellen. Hierzu müssen, wie vom IdP 2.x gewohnt, zunächst nur die Tabellen für die Angaben zur Persistent Id angelegt werden, die Tabelle " | ||
| - | |||
| - | Hier ein Beispiel für MySQL, wobei hier vorausschauend auch gleich eine Tabelle für die persistentId angelegt wird, welche später noch gebraucht wird (siehe später in dieser Anleitung): | ||
| - | |||
| - | <code mysql> | ||
| - | mysql> SET NAMES ' | ||
| - | SET CHARACTER SET utf8; | ||
| - | CHARSET utf8; | ||
| - | CREATE DATABASE IF NOT EXISTS shibboleth CHARACTER SET=utf8; | ||
| - | USE shibboleth; | ||
| - | |||
| - | mysql> CREATE TABLE IF NOT EXISTS shibpid ( | ||
| - | localEntity VARCHAR(255) NOT NULL, | ||
| - | peerEntity VARCHAR(255) NOT NULL, | ||
| - | persistentId VARCHAR(50) NOT NULL, | ||
| - | principalName VARCHAR(50) NOT NULL, | ||
| - | localId VARCHAR(50) NOT NULL, | ||
| - | peerProvidedId VARCHAR(50) NULL, | ||
| - | creationDate TIMESTAMP NOT NULL, | ||
| - | deactivationDate TIMESTAMP NULL, | ||
| - | PRIMARY KEY (localEntity, | ||
| - | ); | ||
| - | |||
| - | mysql> CREATE USER ' | ||
| - | |||
| - | mysql> GRANT ALL PRIVILEGES ON shibboleth.* TO ' | ||
| - | |||
| - | mysql> FLUSH PRIVILEGES; | ||
| - | </ | ||
| - | |||
| - | Ein Beispiel für PostgreSQL findet sich beim [[https:// | ||
| - | |||
| - | Der DB-Zugriff wird über den [[https:// | ||
| - | |||
| - | PostgreSQL: Siehe [[https:// | ||
| - | [[https:// | ||
| - | |||
| - | Die Properties für den DB-Zugriff werden jetzt noch in idp.properties ergänzt (bitte auf die Tomcat-Version achten!): | ||
| - | |||
| - | <file java / | ||
| - | # Tomcat7 | ||
| - | # | ||
| - | # Tomcat8 | ||
| - | mysql.class | ||
| - | # Achtung: ggf. kann es zu einem Timezone-Bug kommen. Dann ist die Angabe des Timezone-Parameters erforderlich, | ||
| - | mysql.url | ||
| - | mysql.username = shibboleth | ||
| - | mysql.password = GeHEIM007 | ||
| - | </ | ||
| - | |||
| - | Starten Sie Tomcat neu, um sicherzustellen, | ||
| - | |||
| - | <code bash> | ||
| - | root@idp:/ | ||
| - | </ | ||
| - | |||
| - | Hinweis: bei älteren Java Versionen führt der Parameter " | ||
| - | |||
| - | ===== PersistentId Konfiguration ===== | ||
| - | |||
| - | Die persistentId wird in drei Schritten aktiviert: | ||
| - | |||
| - | Erstens wird festgelegt, wie die Id generiert und abgelegt werden soll: | ||
| - | |||
| - | <file properties / | ||
| - | # ein Attribut aus attribute-resolver.xml als unique Identifier, dabei wird hier der Wert der " | ||
| - | # dieses Attributes aus attribute-resolver.xml referenziert und _nicht_ der Attribut-Name aus dem IdM! | ||
| - | # in den allermeisten Fällen wird das immer ' | ||
| - | # Attribut ' | ||
| - | idp.persistentId.sourceAttribute = uid | ||
| - | # | ||
| - | # Do *NOT* share the salt with other people, it's like divulging your private key. | ||
| - | # | ||
| - | idp.persistentId.salt = MöglichstBeliebigUndGeHeim-mindestens-16bytes | ||
| - | |||
| - | # To use a database, use shibboleth.StoredPersistentIdGenerator | ||
| - | idp.persistentId.generator = shibboleth.StoredPersistentIdGenerator | ||
| - | # For basic use, set this to a JDBC DataSource bean name: | ||
| - | idp.persistentId.dataSource = shibboleth.MySQLDataSource | ||
| - | </ | ||
| - | |||
| - | **Hinweise zur Wahl des Quellatributs: | ||
| - | |||
| - | * Als Quellattribut aus dem IdM für die persistentId muss man ein IdM-Attribut nehmen, welches auch über die Zeit für alle Benutzer eindeutig ist. Oft ist dies das IdM-Attribut ' | ||
| - | * Eine Möglichkeit, | ||
| - | * Beispiele zur Generierung finden Sie unter [[: | ||
| - | |||
| - | Zweitens wird die Java-Bean für die Generierung aktiviert indem der Eintrag für shibboleth.SAML2PersistentGenerator ent-kommentieren wird: | ||
| - | |||
| - | <file xml / | ||
| - | <beans ...> | ||
| - | <!-- ... --> | ||
| - | <!-- SAML 2 NameID Generation --> | ||
| - | < | ||
| - | |||
| - | <ref bean=" | ||
| - | |||
| - | <!-- Uncommenting this bean requires configuration in saml-nameid.properties. --> | ||
| - | |||
| - | <ref bean=" | ||
| - | |||
| - | </ | ||
| - | <!-- ... --> | ||
| - | </ | ||
| - | </ | ||
| - | |||
| - | Drittens wird die Verarbeitung der Id aktiviert: | ||
| - | |||
| - | <file xml / | ||
| - | <beans ...> | ||
| - | <!-- ... --> | ||
| - | < | ||
| - | <!-- ... --> | ||
| - | |||
| - | <!-- Handle a SAML 2 persistent ID, provided a stored strategy is in use. --> | ||
| - | <ref bean=" | ||
| - | |||
| - | <!-- ... --> | ||
| - | </ | ||
| - | <!-- ... --> | ||
| - | </ | ||
| - | </ | ||
| - | |||
| - | Viertens: meist sind Usernamen im IdM-System unabhängig von Gross- und Kleinschreibung. D.h. die User können Ihren Loginnamen sowohl in Gross- als auch Kleinschreibung angeben und damit einen erfolgreichen Login durchführen. Allerdings führt dieses später zu Problemen beim Verwalten der Usernamen in der lokalen IdP-Datenbank da diese Gross- und Kleinschreibung unterscheidet. Wir empfehlen daher den Usernamen in diesen Fällen im IdP in Kleinbuchstaben umzuwandeln: | ||
| - | |||
| - | <file xml ./ | ||
| - | ... | ||
| - | < | ||
| - | ... | ||
| - | </ | ||
| - | |||
| - | Damit werden die Usernamen vom IdP nur noch in Kleinbuchstabenform verarbeitet und in die Datenbank geschrieben. | ||
| - | |||
| - | ===== Session-Informationen und User Consent ===== | ||
| - | |||
| - | Nachdem Datenbankverbindung und persistentId aktiviert sind, können diese nun für die Speicherung von Session- und User Consent-Informationen genutzt werden. Dadurch wird als netter Nebeneffekt auch [[: | ||
| - | |||
| - | <file properties / | ||
| - | ... | ||
| - | # Set to " | ||
| - | idp.session.StorageService = shibboleth.JPAStorageService | ||
| - | |||
| - | # Set to " | ||
| - | idp.consent.StorageService = shibboleth.JPAStorageService | ||
| - | |||
| - | # Set to " | ||
| - | # to key user consent storage records (and set the attribute name) | ||
| - | idp.consent.attribute-release.userStorageKey = shibboleth.consent.PrincipalConsentStorageKey | ||
| - | idp.consent.attribute-release.userStorageKeyAttribute = %{idp.persistentId.sourceAttribute} | ||
| - | idp.consent.terms-of-use.userStorageKey = shibboleth.consent.PrincipalConsentStorageKey | ||
| - | idp.consent.terms-of-use.userStorageKeyAttribute = %{idp.persistentId.sourceAttribute} | ||
| - | |||
| - | # Flags controlling how built-in attribute consent feature operates | ||
| - | # | ||
| - | # damit der User für jeden SP mindestens einmal einwilligen muß sollte | ||
| - | # die Möglichkeit für eine globale Einwilligung abgeschaltet werden: | ||
| - | idp.consent.allowGlobal = false | ||
| - | # | ||
| - | |||
| - | # Damit auch bei neuem Wert eines Attributes und bei neuem Terms-Of-Use-Text der | ||
| - | # User erneut abnicken muss. Da jetzt statt Browser-Cookies eine lokale DB zur | ||
| - | # Verfügung steht sollte dieses sinnvolle Feature aktiviert werden! | ||
| - | idp.consent.compareValues = true | ||
| - | </ | ||
| - | |||
| - | ===== User Consent zu Attributfreigabe bei Attribute Queries berücksichtigen ===== | ||
| - | |||
| - | Damit bei Attribute Queries Nutzer-Entscheidungen zur Attributfreigabe berücksichtigt werden, muss in ./ | ||
| - | |||
| - | <file xml ./ | ||
| - | <!-- | ||
| - | Condition to evaluate to apply attribute-release consent to attribute queries. | ||
| - | --> | ||
| - | <bean id=" | ||
| - | </ | ||
| - | |||
| - | Starten Sie Tomcat neu, um die neuen Einstellungen zu aktivieren (dabei Logdateien mitverfolgen!): | ||
| - | |||
| - | <code bash> | ||
| - | root@idp:/ | ||
| - | </ | ||
| - | |||
| - | ===== Weitergabe der Persistent ID ===== | ||
| - | |||
| - | Um in den Fällen, in denen ein anfragender SP keine Präferenzen bzgl. Name ID Format signalisiert (Metadaten und/oder AuthnRequest), | ||
| - | |||
| - | <file xml / | ||
| - | <beans ...> | ||
| - | <!-- ... --> | ||
| - | <bean id=" | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | | ||
| - | | ||
| - | < | ||
| - | </ | ||
| - | </ | ||
| - | </ | ||
| - | <!-- ... --> | ||
| - | </ | ||
| - | </ | ||
| - | |||
| - | Starten Sie Tomcat neu, um die neuen Einstellungen zu aktivieren (dabei Logdateien mitverfolgen!): | ||
| - | |||
| - | <code bash> | ||
| - | root@idp:/ | ||
| - | </ | ||
| - | |||
| - | Testen Sie nochmals einen Login mithilfe der DFN-Test-SP(s) und überzeugen Sie sich, dass die persistentId übertragen wird. | ||
| - | |||
| - | HINWEIS: Da die persistendId kein SAML-Attribut ist, wird Ihnen diese nach dem Login am IdP nicht in der Liste der zu übertragenden Attribute angezeigt. Erst wenn Sie wieder am Test-SP sind wird Ihnen dort die persistentId, | ||
| - | |||
| - | Falls die persistentId nur an ausgewählte SPs übertragen werden soll, so finden sich [[: | ||
| - | |||
| - | **Weiter geht es mit [[: | ||
| - | |||