Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
de:shibidp3storage [2018/02/20 12:10]
Wolfgang Pempe
de:shibidp3storage [2019/10/01 13:56] (aktuell)
cvan-hoorn@hs-bremen.de [MySQL]
Zeile 1: Zeile 1:
-====== Server-Side-Storage und Persistent Identifier ======+====== Server-Side-Storage, Sessions, User Consent ​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 "​Notlösung"​ betrachtet werden, damit der IdP auch ohne angeschlossene SQL-Datenbank funktioniert. In einem fertigen Produktivszenario ist das Abspeichern dieser Informationen auf Serverseite unbedingt zu empfehlen, da nur damit erweiterte SAML-Funktionalitäten möglich sind (z.B. persistentId,​ +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 "​Notlösung"​ betrachtet werden, damit der IdP auch ohne angeschlossene SQL-Datenbank funktioniert. In einem fertigen Produktivszenario ist das Abspeichern dieser Informationen auf Serverseite unbedingt zu empfehlen, da nur damit erweiterte SAML-Funktionalitäten möglich sind (z.B. persistentId,​ Single-Logout).
-Single-Logout).+
  
 +**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/​Nutzerin hinsichtlich Attributfreigabe berücksichtigt werden!**
 ===== Installation Datenbanksoftware ===== ===== Installation Datenbanksoftware =====
  
-====MySQL====+==== MySQL ==== 
 + 
 +=== Debian 8 ===
  
-===Debian 8=== 
 <code bash> <code bash>
-root@idp:~# apt-get install mysql-server mysql-client libmysql-java ​+root@idp:~# apt-get install mysql-server mysql-client libmysql-java
 </​code>​ </​code>​
  
-Damit der Tomcat die MySQL-Java-Library beim Starten einliest (d.h. der IdP sie dann verwenden kann), wird +Damit der Tomcat die MySQL-Java-Library beim Starten einliest (d.h. der IdP sie dann verwenden kann), wird diese üblicherweise in /​etc/​tomcat8/​catalina.properties in den "​common.loader"​ aufgenommen. Dies hat den Nachteil, dass diese Datei dann bei jedem Upgrade manuell mit einer neuen catalina.properties verglichen werden muss. Man kann sich die Arbeit ersparen (sofern man dort nicht sowieso Anpassungen machen muss, was beim Einsatz des IdPs als einziges Servlet im Tomcat aber nicht nötig sein sollte!), indem man die mysql-Datei in das Runtime-Lib-Verzeichnis von Tomcat verlinkt. Dort wird sie dann automatisch eingelesen:
-diese üblicherweise in /​etc/​tomcat8/​catalina.properties in den "​common.loader"​ aufgenommen. Dies hat den Nachteil, dass diese Datei dann bei jedem Upgrade manuell mit einer neuen catalina.properties verglichen werden muss. Man kann sich die Arbeit ersparen (sofern man dort nicht sowieso Anpassungen machen muss, was beim Einsatz des IdPs als einziges Servlet im Tomcat aber nicht nötig sein sollte!), indem man die mysql-Datei in das Runtime-Lib-Verzeichnis von Tomcat verlinkt. Dort wird sie dann automatisch eingelesen:+
  
 <code bash> <code bash>
 root@idp:~# ln -s /​usr/​share/​java/​mysql.jar /​var/​lib/​tomcat8/​lib/​mysql.jar root@idp:~# ln -s /​usr/​share/​java/​mysql.jar /​var/​lib/​tomcat8/​lib/​mysql.jar
 </​code>​ </​code>​
 +
 +=== Debian 10 ===
 +
 +Für Debian 10 ist das entsprechende Paket nun Bestandteil von MariaDB. ​
 +
 +<code bash>
 +root@idp:~# apt install libmariadb-java
 +</​code>​
 +
 +Die Installation des Paketes installiert automatisch die jar-Dateien in "/​usr/​share/​lib/​java/"​. Sofern dieses Verzeichnis vorher in Tomcat angegeben wurde, ist die Empfehlung für Debian 8 nicht mehr erforderlich.
 +<code bash>
 +dpkg -L libmariadb-java
 +...
 +/​usr/​share/​java/​mariadb-java-client.jar
 +...
 +/​usr/​share/​java/​mariadb-java-client-2.3.0.jar
 +...
 +</​code>​
 +
 +
  
 Starten Sie Tomcat neu um die neuen Einstellungen zu aktivieren (dabei Logdateien mitverfolgen!):​ Starten Sie Tomcat neu um die neuen Einstellungen zu aktivieren (dabei Logdateien mitverfolgen!):​
 +
 <code bash> <code bash>
 root@idp:~# service tomcat8 restart root@idp:~# service tomcat8 restart
 </​code>​ </​code>​
  
-====PostgreSQL====+==== PostgreSQL ==== 
 + 
 +Siehe hierzu einstweilen die [[https://​www.switch.ch/​aai/​guides/​idp/​installation/#​sqldatabase|Anleitung der Schweizer Kolleg(inn)en]]. Hierzu ist jedenfalls die entsprechende Java JDBC Komponente installieren (Debian/​Ubuntu):​
  
-Siehe hierzu einstweilen die [[https://​www.switch.ch/​aai/​guides/​idp/​installation/#​sqldatabase|Anleitung der Schweizer Kolleg(inn)en]]. ​ 
-Hierzu ist jedenfalls die entsprechende Java JDBC Komponente installieren (Debian/​Ubuntu):​ 
 <code bash> <code bash>
 root@idp:~# apt-get install libpostgresql-jdbc-java root@idp:~# apt-get install libpostgresql-jdbc-java
 </​code>​ </​code>​
-===RHEL===+ 
 +=== RHEL === 
 <code bash> <code bash>
 yum install postgresql-server postgresql yum install postgresql-server postgresql
Zeile 71: Zeile 94:
 Ein Beispiel für PostgreSQL findet sich beim [[https://​www.switch.ch/​aai/​guides/​idp/​installation/#​sqldatabase|SWITCH]]. Ein Beispiel für PostgreSQL findet sich beim [[https://​www.switch.ch/​aai/​guides/​idp/​installation/#​sqldatabase|SWITCH]].
  
-Der DB-Zugriff wird über den [[https://​wiki.shibboleth.net/​confluence/​display/​IDP30/​StorageConfiguration|JPAStorageService]] gekapselt. Dieser wird in ./​conf/​global.xml definiert. +Der DB-Zugriff wird über den [[https://​wiki.shibboleth.net/​confluence/​display/​IDP30/​StorageConfiguration|JPAStorageService]] gekapselt. Dieser wird in ./​conf/​global.xml definiert. Diese Datei ist im Auslieferungszustand leer (bis auf Kommentare). Ersetzen Sie sie durch die [[:de:​global_xml-example|hier bereitgestellte Version]].
-Diese Datei ist im Auslieferungszustand leer (bis auf Kommentare). Ersetzen Sie sie durch die [[de:​global_xml-example|hier bereitgestellte Version]]. +
  
 PostgreSQL: Siehe [[https://​www.switch.ch/​aai/​guides/​idp/​installation/#​sqldatabase|Dokumentation von SWITCH]] und die dort zur Verfügung gestellte global.xml:​\\ PostgreSQL: Siehe [[https://​www.switch.ch/​aai/​guides/​idp/​installation/#​sqldatabase|Dokumentation von SWITCH]] und die dort zur Verfügung gestellte global.xml:​\\
-https://​www.switch.ch/​aai/​guides/​idp/​installation/​global.xml+[[https://​www.switch.ch/​aai/​guides/​idp/​installation/​global.xml|https://​www.switch.ch/​aai/​guides/​idp/​installation/​global.xml]]
  
 Die Properties für den DB-Zugriff werden jetzt noch in idp.properties ergänzt (bitte auf die Tomcat-Version achten!): Die Properties für den DB-Zugriff werden jetzt noch in idp.properties ergänzt (bitte auf die Tomcat-Version achten!):
Zeile 85: Zeile 106:
 # Tomcat8 # Tomcat8
 mysql.class ​   = org.apache.tomcat.jdbc.pool.DataSource mysql.class ​   = org.apache.tomcat.jdbc.pool.DataSource
 +# Achtung: ggf. kann es zu einem Timezone-Bug kommen. Dann ist die Angabe des Timezone-Parameters erforderlich,​ z.B.  mysql.url = jdbc:​mysql://​localhost:​3306/​shibboleth/?​serverTimezone=UTC
 mysql.url ​     = jdbc:​mysql://​localhost:​3306/​shibboleth mysql.url ​     = jdbc:​mysql://​localhost:​3306/​shibboleth
 mysql.username = shibboleth mysql.username = shibboleth
Zeile 91: Zeile 113:
  
 Starten Sie Tomcat neu, um sicherzustellen,​ dass die global.xml ohne Probleme eingelesen werden kann (dabei Logdateien mitverfolgen!):​ Starten Sie Tomcat neu, um sicherzustellen,​ dass die global.xml ohne Probleme eingelesen werden kann (dabei Logdateien mitverfolgen!):​
 +
 <code bash> <code bash>
 root@idp:/​opt/​shibboleth-idp#​ service tomcat8 restart root@idp:/​opt/​shibboleth-idp#​ service tomcat8 restart
Zeile 96: Zeile 119:
  
 Hinweis: bei älteren Java Versionen führt der Parameter "​p:​validationQueryTimeout"​ zu einer Fehlermeldung,​ in dem Fall einfach weglassen und Tomcat neu starten. Hinweis: bei älteren Java Versionen führt der Parameter "​p:​validationQueryTimeout"​ zu einer Fehlermeldung,​ in dem Fall einfach weglassen und Tomcat neu starten.
- 
  
 ===== PersistentId Konfiguration ===== ===== PersistentId Konfiguration =====
Zeile 109: Zeile 131:
 # in den allermeisten Fällen wird das immer '​uid'​ sein, auch bei Microsoft AD (dort dient das IdM- # in den allermeisten Fällen wird das immer '​uid'​ sein, auch bei Microsoft AD (dort dient das IdM-
 # Attribut '​sAMAccountName'​ bzw. neuerdings '​cn'​ als Quelle fur das IdP-Attribut '​uid'​) # Attribut '​sAMAccountName'​ bzw. neuerdings '​cn'​ als Quelle fur das IdP-Attribut '​uid'​)
-idp.persistentId.sourceAttribute = uid +idp.persistentId.sourceAttribute = uid
 #​idp.persistentId.useUnfilteredAttributes = true #​idp.persistentId.useUnfilteredAttributes = true
 # Do *NOT* share the salt with other people, it's like divulging your private key. # Do *NOT* share the salt with other people, it's like divulging your private key.
Zeile 121: Zeile 143:
 </​file>​ </​file>​
  
-Hinweise zur Wahl des Quellatributs:​+**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 '​uid'​ (oder bei AD '​sAMAccountName'​ bzw. neuerdings '​cn'​). Sollte dies bei Ihnen nicht der Fall sein, d.h. diese Attribute werden für neue User recycled (auch aus anderen Gründen nicht zu empfehlen!),​ dann muss ein anderes IdM-Attribut gefunden werden.   * 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 '​uid'​ (oder bei AD '​sAMAccountName'​ bzw. neuerdings '​cn'​). Sollte dies bei Ihnen nicht der Fall sein, d.h. diese Attribute werden für neue User recycled (auch aus anderen Gründen nicht zu empfehlen!),​ dann muss ein anderes IdM-Attribut gefunden werden.
   * Eine Möglichkeit,​ dieses Problem zu umgehen, besteht darin, sich ein neues Attribut in attribute-resolver.xml zu definieren. Dieses Attribut könnte zum Beispiel aus einem Hash aus uid und dem Anlegedatum des Accounts bestehen.   * Eine Möglichkeit,​ dieses Problem zu umgehen, besteht darin, sich ein neues Attribut in attribute-resolver.xml zu definieren. Dieses Attribut könnte zum Beispiel aus einem Hash aus uid und dem Anlegedatum des Accounts bestehen.
-  * Beispiele zur Generierung finden Sie unter [[de:​shibidp3pidspecials|Persistent ID - Sonderfälle]].+  * Beispiele zur Generierung finden Sie unter [[:de:​shibidp3pidspecials|Persistent ID - Sonderfälle]].
  
 Zweitens wird die Java-Bean für die Generierung aktiviert indem der Eintrag für shibboleth.SAML2PersistentGenerator ent-kommentieren wird: Zweitens wird die Java-Bean für die Generierung aktiviert indem der Eintrag für shibboleth.SAML2PersistentGenerator ent-kommentieren wird:
Zeile 173: Zeile 195:
 Damit werden die Usernamen vom IdP nur noch in Kleinbuchstabenform verarbeitet und in die Datenbank geschrieben. Damit werden die Usernamen vom IdP nur noch in Kleinbuchstabenform verarbeitet und in die Datenbank geschrieben.
  
-===== Session-Informationen und User Consent ​in DB ablegen ​=====+===== 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 SingleLogout- +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. Außerdem können nun bei Attribute Queries Nutzer-Entscheidungen zu Attributfreigaben berücksichtigt werden (siehe unten).
-Unterstützung im IdP ermöglicht:+
  
 <file properties /​opt/​shibboleth-idp/​conf/​idp.properties>​ <file properties /​opt/​shibboleth-idp/​conf/​idp.properties>​
Zeile 184: Zeile 205:
  
 # Set to "​shibboleth.StorageService"​ or custom bean for alternate storage of consent # Set to "​shibboleth.StorageService"​ or custom bean for alternate storage of consent
-idp.consent.StorageService = shibboleth.JPAStorageService ​+idp.consent.StorageService = shibboleth.JPAStorageService
  
 # Set to "​shibboleth.consent.AttributeConsentStorageKey"​ to use an attribute # Set to "​shibboleth.consent.AttributeConsentStorageKey"​ to use an attribute
 # to key user consent storage records (and set the attribute name) # to key user consent storage records (and set the attribute name)
-idp.consent.userStorageKey = shibboleth.consent.AttributeConsentStorageKey +idp.consent.attribute-release.userStorageKey = shibboleth.consent.PrincipalConsentStorageKey 
-idp.consent.userStorageKeyAttribute = %{idp.persistentId.sourceAttribute}+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 # Flags controlling how built-in attribute consent feature operates
Zeile 202: Zeile 225:
 # Verfügung steht sollte dieses sinnvolle Feature aktiviert werden! # Verfügung steht sollte dieses sinnvolle Feature aktiviert werden!
 idp.consent.compareValues = true idp.consent.compareValues = true
 +</​file>​
 +
 +===== User Consent zu Attributfreigabe bei Attribute Queries berücksichtigen =====
 +
 +Damit bei Attribute Queries Nutzer-Entscheidungen zur Attributfreigabe berücksichtigt werden, muss in ./​conf/​intercept/​consent-intercept-config.xml die entsprechende Condition gesetzt werden:
 +
 +<file xml ./​conf/​intercept/​consent-intercept-config.xml>​
 +    <!--
 +    Condition to evaluate to apply attribute-release consent to attribute queries.
 +    -->
 +    <bean id="​shibboleth.consent.AttributeQuery.Condition"​ parent="​shibboleth.Conditions.TRUE"​ />
 </​file>​ </​file>​
  
 Starten Sie Tomcat neu, um die neuen Einstellungen zu aktivieren (dabei Logdateien mitverfolgen!):​ Starten Sie Tomcat neu, um die neuen Einstellungen zu aktivieren (dabei Logdateien mitverfolgen!):​
 +
 <code bash> <code bash>
 root@idp:/​opt/​shibboleth-idp#​ service tomcat8 restart root@idp:/​opt/​shibboleth-idp#​ service tomcat8 restart
 </​code>​ </​code>​
 +
 ===== Weitergabe der Persistent ID ===== ===== 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),​ eine Gewichtung festzulegen (siehe hierzu die [[https://​wiki.shibboleth.net/​confluence/​display/​IDP30/​NameIDGenerationConfiguration#​NameIDGenerationConfiguration-FormatSelectionFormatSelection|Doku im Shibboleth-Wiki]]),​ kann die SAML2.SSO-Bean-Definition **bei Bedarf** entsprechend erweitert werden:+Um in den Fällen, in denen ein anfragender SP keine Präferenzen bzgl. Name ID Format signalisiert (Metadaten und/oder AuthnRequest),​ eine Gewichtung festzulegen (siehe hierzu die [[https://​wiki.shibboleth.net/​confluence/​display/​IDP30/​NameIDGenerationConfiguration#​NameIDGenerationConfiguration-FormatSelectionFormatSelection|Doku im Shibboleth-Wiki]]),​ kann die SAML2.SSO-Bean-Definition **bei Bedarf** ​ entsprechend erweitert werden:
  
 <file xml /​conf/​relying-party.xml>​ <file xml /​conf/​relying-party.xml>​
Zeile 219: Zeile 255:
        <​list>​        <​list>​
          <​!-- ... -->          <​!-- ... -->
-         <​bean parent="​SAML2.SSO"​  +         <​bean parent="​SAML2.SSO"​ 
-               ​p:​postAuthenticationFlows="#​{{'​terms-of-use',​ '​attribute-release'​}}" ​+               ​p:​postAuthenticationFlows="#​{{'​terms-of-use',​ '​attribute-release'​}}"​
                ​p:​nameIDFormatPrecedence="#​{{'​urn:​oasis:​names:​tc:​SAML:​2.0:​nameid-format:​persistent',​ '​urn:​oasis:​names:​tc:​SAML:​2.0:​nameid-format:​transient'​}}"/>​                ​p:​nameIDFormatPrecedence="#​{{'​urn:​oasis:​names:​tc:​SAML:​2.0:​nameid-format:​persistent',​ '​urn:​oasis:​names:​tc:​SAML:​2.0:​nameid-format:​transient'​}}"/>​
          <​!-- ... -->          <​!-- ... -->
Zeile 231: Zeile 267:
  
 Starten Sie Tomcat neu, um die neuen Einstellungen zu aktivieren (dabei Logdateien mitverfolgen!):​ Starten Sie Tomcat neu, um die neuen Einstellungen zu aktivieren (dabei Logdateien mitverfolgen!):​
 +
 <code bash> <code bash>
 root@idp:/​opt/​shibboleth-idp#​ service tomcat8 restart root@idp:/​opt/​shibboleth-idp#​ service tomcat8 restart
 </​code>​ </​code>​
  
-Testen Sie nochmals einen Login mithilfe der DFN-Test-SP(s) und überzeugen Sie sich, dass die +Testen Sie nochmals einen Login mithilfe der DFN-Test-SP(s) und überzeugen Sie sich, dass die persistentId übertragen wird.
-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,​ sofern diese übertragen wurde, zusammen mit den übertragenen Attributen angezeigt. 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,​ sofern diese übertragen wurde, zusammen mit den übertragenen Attributen angezeigt.
  
-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:​shibidp3pidspecials|hier einige Beispiele]]. 
 + 
 +**Weiter geht es mit [[:​de:​shibidp3slo|Single Logout]]. **
  
  
-** Weiter geht es mit [[de:​shibidp3slo|Single Logout]]. ** 
  • Zuletzt geändert: vor 22 Monaten