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:shibidp3consent_dsgvo [2019/01/21 17:37]
Wolfgang Pempe
de:shibidp3consent_dsgvo [2019/04/17 17:11] (aktuell)
Wolfgang Pempe [Attribute Query und User Consent]
Zeile 36: Zeile 36:
  
 ==== Attribute Release aufgrund unterschiedlicher Rechtsgrundlagen ==== ==== Attribute Release aufgrund unterschiedlicher Rechtsgrundlagen ====
-Wenn die Attributfreigabe fallweise aufgrund anderer Erlaubnisnormen erfolgt, bedarf es entsprechend angepasster Interceptor Flows, die je nach anfragendem SP und ggf. Nutzergruppe aufgerufen werden. Siehe hierzu die Lösungsmodelle aus der Präsentation [[https://​www.dfn.de/​fileadmin/​3Beratung/​Betriebstagungen/​bt69/​BT69_AAI_DS-AAI-Verfahren_Strobel_Moerike.pdf|"​Datenschutzrechtliche Analyse das AAI-Verfahrens"​]] von der [[https://​www.dfn.de/​veranstaltungen/​bt/​vortraege/​69-betriebstagung-2509-bis-26092018/​|69. DFN-Betriebstagung]] und die Präsentation [[https://​download.aai.dfn.de/​ws/​2018_fub/​interceptor_dsgvo.pdf|"​Wir basteln einen Interceptor Flow"​]]. ​+Wenn die Attributfreigabe fallweise aufgrund anderer Erlaubnisnormen erfolgt, bedarf es entsprechend angepasster ​[[https://​wiki.shibboleth.net/​confluence/​display/​IDP30/​ProfileInterceptConfiguration|Interceptor Flows]], die je nach anfragendem SP und ggf. Nutzergruppe aufgerufen werden. Siehe hierzu die Lösungsmodelle aus der Präsentation [[https://​www.dfn.de/​fileadmin/​3Beratung/​Betriebstagungen/​bt69/​BT69_AAI_DS-AAI-Verfahren_Strobel_Moerike.pdf|"​Datenschutzrechtliche Analyse das AAI-Verfahrens"​]] von der [[https://​www.dfn.de/​veranstaltungen/​bt/​vortraege/​69-betriebstagung-2509-bis-26092018/​|69. DFN-Betriebstagung]] und die Präsentation [[https://​download.aai.dfn.de/​ws/​2018_fub/​interceptor_dsgvo.pdf|"​Wir basteln einen Interceptor Flow"​]]. ​
  
 Neben der angepassten Datei **[[de:​shibidp3consent_dsgvo_attribute_release|./​views/​intercept/​attribute-release.vm]]** (siehe oben) werden hierfür noch die Velocity Templates **attribute-info.vm** und **attribute-must.vm**,​ die von der selben **[[de:​shibidp3consent_dsgvo_attribute_release|Wiki Seite]]** heruntergeladen werden können (Varianten 2 und 3) und die ebenfalls in ''​./​views/​intercept''​ abgelegt werden. ​ Neben der angepassten Datei **[[de:​shibidp3consent_dsgvo_attribute_release|./​views/​intercept/​attribute-release.vm]]** (siehe oben) werden hierfür noch die Velocity Templates **attribute-info.vm** und **attribute-must.vm**,​ die von der selben **[[de:​shibidp3consent_dsgvo_attribute_release|Wiki Seite]]** heruntergeladen werden können (Varianten 2 und 3) und die ebenfalls in ''​./​views/​intercept''​ abgelegt werden. ​
Zeile 73: Zeile 73:
 \\ \\
  
-**3. Dafür sorgen, dass Bezeichnung des Events im Log den betreffenden ​Flow bezeichnet ​(--> Nachweispflichten)**+**3. Dafür sorgen, dass Bezeichnung des Events im Log dem jeweils aufgerufenen ​Flow entspricht ​(--> Nachweispflichten)**
  
 <file xml ./​flows/​intercept/​attribute-info/​attribute-info-flow.xml> ​ <file xml ./​flows/​intercept/​attribute-info/​attribute-info-flow.xml> ​
Zeile 95: Zeile 95:
 und und
  
-<file xml ./​flows/​intercept/​attribute-info/​attribute-must-flow.xml>​+<file xml ./​flows/​intercept/​attribute-must/​attribute-must-flow.xml>​
      <​action-state id="​ExtractConsent">​      <​action-state id="​ExtractConsent">​
         <​evaluate expression="​ExtractConsent"​ />         <​evaluate expression="​ExtractConsent"​ />
Zeile 111: Zeile 111:
         <​transition on="​proceed"​ to="​TestForDoNotRememberConsent"​ />         <​transition on="​proceed"​ to="​TestForDoNotRememberConsent"​ />
     </​action-state>​     </​action-state>​
 +</​file>​
 +
 +\\
 +
 +**4. Neue Flows deklarieren und mit Activation Conditions verknüpfen**
 +
 +Dies geschieht am besten in **[[de:​shibidp3consent_dsgvo_profile-intercept|./​conf/​intercept/​profile-intercept.xml (Beispiel)]]** ​
 +
 +\\
 +
 +**5. Neue Flows in der Relying Party Konfiguration dem SSO-Profil als Post Authentication Flows zuordnen**
 +
 +<file xml ./​conf/​relying-party.xml>​
 +    <bean id="​shibboleth.DefaultRelyingParty"​ parent="​RelyingParty">​
 +        <​property name="​profileConfigurations">​
 +            <​list>​
 +                <bean parent="​SAML2.SSO"​ p:​postAuthenticationFlows="#​{{'​terms-of-use',​ '​attribute-release',​ '​attribute-info',​ '​attribute-must'​}}"​ />
 +                <ref bean="​SAML2.ECP"​ />
 +                <ref bean="​SAML2.Logout"​ />
 +                <ref bean="​SAML2.AttributeQuery"​ />
 +                <ref bean="​SAML2.ArtifactResolution"​ />
 +            </​list>​
 +        </​property>​
 +    </​bean>​
 +</​file>​
 +
 +\\
 +
 +**HTML-Ansicht ''​attribute-info.vm''​**\\
 +{{:​de:​02_user_consent.png?​200|}}
 +
 +**HTML-Ansicht ''​attribute-must.vm''​**\\
 +{{:​de:​03_user_consent.png?​200|}}
 +
 +==== Attribute Query und User Consent ====
 +Ab Shibboleth IdP 3.4.3 kann bei Attribute Queries die jeweils letzte Entscheidung des Users zur Attributfreigabe berücksichtigt werden. Dies funktioniert natürlich nur, wenn die (virtuellen) Entscheidungen zur Attributfreigabe in einer IdP-seitigen Datenbank abgelegt werden und eine entsprechende Condition gesetzt ist. Siehe hierzu unter [[de:​shibidp3storage#​user_consent_zu_attributfreigabe_bei_attribute_queries_beruecksichtigen|Server-Side-Storage - User Consent]].
 +
 +Damit Attribute Queries unter diesen Rahmenbedingungen auch im oben skizzierten Setup funktionieren,​ sind weitere Konfigurationsschritte erforderlich:​
 +
 +Zunächst die Dateien \\
 +''​./​system/​flows/​intercept/​attribute-release-query-beans.xml''​ und \\
 +''​./​system/​flows/​intercept/​attribute-release-query-flow.xm''​ \\
 +in ein Verzeichnis namens \\
 +''​./​flows/​intercept/​attribute-release-query''​ \\
 +kopieren.
 +
 +Anschließend müssen diverse Anpassungen vorgenommen werden:
 +<file xml ./​flows/​intercept/​attribute-release-query-beans.xml>​
 +    <!-- Use '​intercept/​attribute-release'​ as storage context. -->
 +
 +    <bean id="​AttributeReleaseStorageContextLookupStrategy"​ class="​com.google.common.base.Functions"​
 +        factory-method="​constant"​ c:​_0="​intercept/​attribute-release"​ />
 +
 +    <bean id="​ReadAttributeReleaseConsentFromStorage"​
 +        class="​net.shibboleth.idp.consent.flow.storage.impl.ReadConsentFromStorage"​ scope="​prototype"​
 +        p:​storageKeyLookupStrategy-ref="​shibboleth.consent.UserAndRelyingPartyStorageKey"​
 +        p:​storageSerializer-ref="​shibboleth.consent.ConsentSerializer"​
 +        p:​storageContextLookupStrategy-ref="​AttributeReleaseStorageContextLookupStrategy"​ />
 + 
 +    <!-- Use '​intercept/​attribute-info'​ as storage context. -->
 +    <bean id="​AttributeReleaseInfoStorageContextLookupStrategy"​ class="​com.google.common.base.Functions"​
 +        factory-method="​constant"​ c:​_0="​intercept/​attribute-info"​ />
 +
 +    <bean id="​ReadAttributeReleaseInfoConsentFromStorage"​
 +        class="​net.shibboleth.idp.consent.flow.storage.impl.ReadConsentFromStorage"​ scope="​prototype"​
 +        p:​storageKeyLookupStrategy-ref="​shibboleth.consent.UserAndRelyingPartyStorageKey"​
 +        p:​storageSerializer-ref="​shibboleth.consent.ConsentSerializer"​
 +        p:​storageContextLookupStrategy-ref="​AttributeReleaseInfoStorageContextLookupStrategy"​ />
 +
 +    <!-- Use '​intercept/​attribute-must'​ as storage context. -->
 +    <bean id="​AttributeReleaseMustStorageContextLookupStrategy"​ class="​com.google.common.base.Functions"​
 +        factory-method="​constant"​ c:​_0="​intercept/​attribute-must"​ />
 +
 +    <bean id="​ReadAttributeReleaseMustConsentFromStorage"​
 +        class="​net.shibboleth.idp.consent.flow.storage.impl.ReadConsentFromStorage"​ scope="​prototype"​
 +        p:​storageKeyLookupStrategy-ref="​shibboleth.consent.UserAndRelyingPartyStorageKey"​
 +        p:​storageSerializer-ref="​shibboleth.consent.ConsentSerializer"​
 +        p:​storageContextLookupStrategy-ref="​AttributeReleaseMustStorageContextLookupStrategy"​ />
 +
 +</​file>​
 +
 +In der Flow-Definition den Block nach ''<​!-- Read consent from storage -->''​ anpassen und erweitern:
 +<file xml ./​flows/​intercept/​attribute-release-query-flow.xml>​
 +    <!-- Read consent from storage. -->
 +
 +    <​action-state id="​ReadConsentFromStorage">​
 +        <​evaluate expression="​ReadAttributeReleaseConsentFromStorage"​ />
 +        <​evaluate expression="'​proceed'"​ />
 +
 +        <​transition on="​proceed"​ to="​ReadInfoConsentFromStorage"​ />
 +    </​action-state>​
 +
 +    <​action-state id="​ReadInfoConsentFromStorage">​
 +        <​evaluate expression="​ReadAttributeReleaseInfoConsentFromStorage"​ />
 +        <​evaluate expression="'​proceed'"​ />
 +
 +        <​transition on="​proceed"​ to="​ReadMustConsentFromStorage"​ />
 +    </​action-state>​
 +
 +    <​action-state id="​ReadMustConsentFromStorage">​
 +        <​evaluate expression="​ReadAttributeReleaseMustConsentFromStorage"​ />
 +        <​evaluate expression="'​proceed'"​ />
 +
 +        <​transition on="​proceed"​ to="​TestForReadGlobalAttributeConsentFromStorage"​ />
 +    </​action-state>​
 +
 +    <​decision-state id="​TestForReadGlobalAttributeConsentFromStorage">​
 +        <if test="​attributeReleaseFlowDescriptor.globalConsentAllowed"​
 +            then="​ReadGlobalAttributeConsentFromStorage"​ else="​CheckPreviousConsents"​ />
 +    </​decision-state>​
 +
 +    <​action-state id="​ReadGlobalAttributeConsentFromStorage">​
 +        <​evaluate expression="​ReadAttributeReleaseGlobalConsentFromStorage"​ />
 +        <​evaluate expression="'​proceed'"​ />
 +
 +        <​transition on="​proceed"​ to="​TestForGlobalAttributeConsent"​ />
 +    </​action-state> ​
 +    ​
 +    <!-- hier noch der angepasste Pfad fürs Import-Statement der Attribute Release Bohne -->
 +    <​bean-import resource="​../​../​../​system/​flows/​intercept/​attribute-release-beans.xml"​ />
 +</​file>​
 +
 +Anschließend noch den flow in ''​./​conf/​intercept/​profile-intercept.xml''​ bekannt machen:
 +<file xml ./​conf/​intercept/​profile-intercept.xml>​
 +    <bean id="​shibboleth.AvailableInterceptFlows"​ parent="​shibboleth.DefaultInterceptFlows"​ lazy-init="​true">​
 +        <​property name="​sourceList">​
 +            <list merge="​true">​
 +               <​!-- ... -->
 +               <​bean id="​intercept/​attribute-release-query"​ parent="​shibboleth.consent.AttributeReleaseFlow"​ />
 +               <​!-- ... -->
 +            </​list>​
 +        </​property>​
 +   </​bean>​
 </​file>​ </​file>​
  • Zuletzt geändert: vor 9 Monaten