Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
de:shibidp:config-storage [2020/04/14 15:18] – Silke Meyer | de:shibidp:config-storage [2023/07/31 12:10] (aktuell) – [Generierung und Speicherung] klarerer Hinweise auf randomness des Salt Silke Meyer | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | <- de: | ||
~~NOTOC~~ | ~~NOTOC~~ | ||
- | ====== Server-Side Storage ====== | + | ====== Server-Side Storage |
{{INLINETOC 2}} | {{INLINETOC 2}} | ||
Zeile 17: | Zeile 18: | ||
==== Installation ==== | ==== Installation ==== | ||
+ | Im einfachsten Fall installieren Sie auf dem IdP einen lokalen Datenbank-Server. Sie können natürlich auch entfernte Datenbanken über das Netzwerk einbinden. | ||
<code bash> | <code bash> | ||
Zeile 31: | Zeile 33: | ||
root@idp:~# systemctl restart tomcat9 | root@idp:~# systemctl restart tomcat9 | ||
</ | </ | ||
+ | |||
+ | Installieren Sie schließlich im IdP (ab Version 4.2!) das JDBC-Plugin:< | ||
==== Datenbank und Tabellen anlegen ==== | ==== Datenbank und Tabellen anlegen ==== | ||
Die Datenbank und der Datenbank-Benutzeraccount müssen manuell erstellt werden. Dann werden noch zwei Tabellen angelegt: | Die Datenbank und der Datenbank-Benutzeraccount müssen manuell erstellt werden. Dann werden noch zwei Tabellen angelegt: | ||
- | * '' | + | * '' |
* '' | * '' | ||
Zeile 52: | Zeile 56: | ||
version bigint(20) NOT NULL, | version bigint(20) NOT NULL, | ||
PRIMARY KEY (context, id) | PRIMARY KEY (context, id) | ||
- | ); | + | ) COLLATE utf8_bin; |
mysql> CREATE TABLE IF NOT EXISTS shibpid ( | mysql> CREATE TABLE IF NOT EXISTS shibpid ( | ||
Zeile 73: | Zeile 77: | ||
</ | </ | ||
- | ==== JPAStorageService | + | ==== JDBCStorageService |
- | Der DB-Zugriff wird über den [[https://wiki.shibboleth.net/ | + | Der DB-Zugriff wird über den [[https:// |
<file xml ./ | <file xml ./ | ||
Zeile 113: | Zeile 117: | ||
p: | p: | ||
- | <bean id="shibboleth.JPAStorageService" | + | <bean id="JDBCStorageService" |
- | | + | |
p: | p: | ||
- | | + | |
- | + | ||
- | <bean id=" | + | |
- | class=" | + | |
- | < | + | |
- | < | + | |
- | < | + | |
- | < | + | |
- | <bean class=" | + | |
- | </ | + | |
- | </ | + | |
- | + | ||
- | <bean id=" | + | |
- | class=" | + | |
- | p: | + | |
- | p: | + | |
- | p: | + | |
</ | </ | ||
</ | </ | ||
Zeile 168: | Zeile 155: | ||
Wählen Sie ein Quellattribut aus Ihrem IdM, das **über die Zeit eindeutig** bleibt! Bei OpenLDAP ist das oft die '' | Wählen Sie ein Quellattribut aus Ihrem IdM, das **über die Zeit eindeutig** bleibt! Bei OpenLDAP ist das oft die '' | ||
- | Ein möglicher Workaround: Sie können sich in der '' | + | Ein möglicher Workaround: Sie können sich in der '' |
==== Generierung und Speicherung ==== | ==== Generierung und Speicherung ==== | ||
- | Das gewählte Quellattribut legen Sie in '' | + | |
+ | Das gewählte Quellattribut legen Sie in '' | ||
<file properties / | <file properties / | ||
idp.persistentId.sourceAttribute = uid | idp.persistentId.sourceAttribute = uid | ||
- | # idp.persistentId.useUnfilteredAttributes = true | + | # BASE64 will match V2 values, we recommend BASE32 encoding for new installs. |
- | # Do *NOT* share the salt with other people, it's like divulging your private key. | + | idp.persistentId.encoding |
- | # idp.persistentId.algorithm = SHA | + | |
- | idp.persistentId.salt = MöglichstBeliebigUndGeHeim-mindestens-16bytes | + | |
# To use a database, use shibboleth.StoredPersistentIdGenerator | # To use a database, use shibboleth.StoredPersistentIdGenerator | ||
Zeile 184: | Zeile 170: | ||
# For basic use, set this to a JDBC DataSource bean name: | # For basic use, set this to a JDBC DataSource bean name: | ||
idp.persistentId.dataSource = shibboleth.MySQLDataSource | idp.persistentId.dataSource = shibboleth.MySQLDataSource | ||
+ | |||
</ | </ | ||
+ | |||
+ | Der Salt-Hash, mit dem die persistentIds generiert werden, wird aus Sicherheitsgründen in der zugriffsbeschränkten Passwortdatei '' | ||
+ | |||
+ | <file properties / | ||
+ | # Bitte durch einen zufällig generierten Salt ersetzen! | ||
+ | idp.persistentId.salt = my-very-very-long-hash | ||
+ | |||
+ | </ | ||
+ | |||
==== Generator anschalten ==== | ==== Generator anschalten ==== | ||
Zeile 228: | Zeile 224: | ||
Meist sind Usernamen in IdM-Systemen unabhängig von Groß- und Kleinschreibung: | Meist sind Usernamen in IdM-Systemen unabhängig von Groß- und Kleinschreibung: | ||
+ | === bis IdP 4.0.1 === | ||
<file xml ./ | <file xml ./ | ||
... | ... | ||
< | < | ||
... | ... | ||
+ | </ | ||
+ | |||
+ | === ab IdP 4.1.0 === | ||
+ | <file properties ./ | ||
+ | idp.c14n.simple.lowercase = true | ||
+ | </ | ||
+ | |||
+ | ===== Data Connector ===== | ||
+ | Stellen Sie sicher, dass Ihre '' | ||
+ | |||
+ | <file xml ./ | ||
+ | < | ||
+ | xsi: | ||
+ | generatedAttributeID=" | ||
+ | salt=" | ||
+ | < | ||
+ | < | ||
+ | </ | ||
</ | </ | ||
===== Session-Informationen und User Consent ===== | ===== 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 [[:de:shibidp3slo|SingleLogout-Unterstützung]] im IdP ermöglicht. | + | 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 [[de:shibidp: |
<file properties / | <file properties / | ||
... | ... | ||
# Set to " | # Set to " | ||
- | idp.session.StorageService = shibboleth.JPAStorageService | + | idp.session.StorageService = JDBCStorageService |
# Set to " | # Set to " | ||
- | idp.consent.StorageService = shibboleth.JPAStorageService | + | idp.consent.StorageService = JDBCStorageService |
# Set to " | # Set to " | ||
Zeile 268: | Zeile 283: | ||
===== User Consent zu Attributfreigabe bei Attribute Queries berücksichtigen ===== | ===== User Consent zu Attributfreigabe bei Attribute Queries berücksichtigen ===== | ||
- | Damit bei Attribute Queries Nutzer-Entscheidungen zur Attributfreigabe berücksichtigt werden, muss in ./ | + | Damit bei Attribute Queries Nutzer-Entscheidungen zur Attributfreigabe berücksichtigt werden, muss in '' |
+ | |||
+ | Dann modifizieren Sie die Datei wie folgt: | ||
<file xml ./ | <file xml ./ | ||
Zeile 308: | Zeile 325: | ||
<code bash> | <code bash> | ||
- | root@idp:/ | + | root@idp:/ |
</ | </ | ||
Zeile 315: | Zeile 332: | ||
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, | 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 [[:de:shibidp3pidspecials|hier einige Beispiele]]. | + | Falls die persistentId nur an ausgewählte SPs übertragen werden soll, so finden sich [[de:shibidp: |
- | **Weiter geht es mit [[:de:shibidp3slo|Single Logout]]. ** | + | ===== Umstellung auf SAML pairwise-id ===== |
+ | Die persistentID und das funktionsanaloge, | ||
+ | | ||
+ | | ||
+ | Für die Umstellung der persistentID auf die pairwise-id gibt es keinen perfekten Weg. Wir empfehlen folgendes Vorgehen, mit dem Sie vermeiden, alle Service Provider die persistentIDs bestehender Accounts umschreiben zu lassen: | ||
+ | * Ändern Sie im IdP das Encoding der persistentIDs auf BASE32. Damit erreichen Sie, dass **//neu generierte// | ||
+ | # BASE64 will match V2 values, we recommend BASE32 encoding for new installs. | ||
+ | idp.persistentId.encoding = BASE32</ | ||
+ | * Setzen Sie auch beim entsprechenden Data Connector in '' | ||
+ | < | ||
+ | xsi: | ||
+ | generatedAttributeID=" | ||
+ | salt=" | ||
+ | encoding=" | ||
+ | queryTimeout=" | ||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | * Bereits **bestehende persistentIDs** lassen Sie in der Datenbank bestehen, wie sie sind. Aus diesen persistentIDs werden dann zwar nicht standardkonforme SAML pairwise-ids gebildet. Wir gehen allerdings nicht davon aus, dass Service Provider, die die pairwise-id entgegennehmen, | ||
+ | * Übermitteln Sie für die pairwise-id den Wert, der persistentID **mit Scope**. | ||
+ | {{tag> |