Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
de:shibidp3storage [2017/03/24 17:00] – Raoul Gunnar Borenius | de:shibidp3storage [2021/05/03 13:51] (aktuell) – veralteten Inhalt gelöscht Silke Meyer | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | ====== Server-Side-Storage und Persistent Identifier ====== | ||
- | Per default werden Informationen zu User Consent (ehemals uApprove) und Persistent IDs client-seitig in Cookies abgelegt. Dies kann aber nur als initiale " | ||
- | Single-Logout). | ||
- | |||
- | ===== 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:// | ||
- | Hierzu ist jedenfalls die entsprechende Java JDBC Komponente installieren (Debian/ | ||
- | <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:// | ||
- | Diese Datei ist im Auslieferungszustand leer (bis auf Kommentare). Ersetzen Sie sie durch die [[de: | ||
- | |||
- | Starten Sie Tomcat neu, um sicherzustellen, | ||
- | <code bash> | ||
- | root@idp:/ | ||
- | </ | ||
- | |||
- | Hinweis: bei älteren Java Versionen führt der Parameter " | ||
- | |||
- | |||
- | 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 | ||
- | mysql.url | ||
- | mysql.username = shibboleth | ||
- | mysql.password = GeHEIM007 | ||
- | </ | ||
- | Starten Sie Tomcat neu um die neuen Einstellungen zu aktivieren (dabei Logdateien mitverfolgen!): | ||
- | <code bash> | ||
- | root@idp:/ | ||
- | </ | ||
- | |||
- | ===== 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 [[de: | ||
- | |||
- | 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 in DB ablegen ===== | ||
- | |||
- | 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 SingleLogout- | ||
- | Unterstützung im IdP ermöglicht: | ||
- | |||
- | <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.userStorageKey = shibboleth.consent.AttributeConsentStorageKey | ||
- | idp.consent.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 | ||
- | </ | ||
- | |||
- | Starten Sie Tomcat neu, um die neuen Einstellungen zu aktivieren (dabei Logdateien mitverfolgen!): | ||
- | <code bash> | ||
- | root@idp:/ | ||
- | </ | ||
- | ===== Weitergabe der Persistent ID ===== | ||
- | |||
- | Um die persistentId für alle SPs freizugeben muss die SAML2.SSO-Bean-Definition erweitert werden: | ||
- | |||
- | <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. | ||
- | |||
- | Falls Sie die persistentId nur an ausgewählte SPs übertragen wollen, finden Sie Beispiele unter [[de: | ||
- | |||
- | |||
- | ** Weiter geht es mit [[de: |