Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
de:shibidp:config-per-attribute-consent [2025/04/22 11:46] Doreen Liebenaude:shibidp:config-per-attribute-consent [2025/04/28 11:16] (aktuell) – Anpassung des Velocity Template für IdP v5 bzgl. non-required Attribute Doreen Liebenau
Zeile 1: Zeile 1:
 ====== Per Attribute Consent für vom SP nicht 'required' Attribute ====== ====== Per Attribute Consent für vom SP nicht 'required' Attribute ======
  
-In den allgemeinen Properties (''conf/idp.properties'') des IdP kann man einen //per Attrbute Consent// einstellen (''idp.consent.allowPerAttribute = true''). D.h. der Nutzer kann für jedes Attribut über eine Checkbox entscheidenob der Wert an den SP übertragen wird oder nicht. Das macht im Sinne des Prozesses aber nur Sinn, für die Attribute, die vom SP nicht explizit über die Metadaten (mit dem Tag ''required="True"'' versehen) angefordert werden.+In den allgemeinen Properties (''conf/idp.properties'') des IdP kann man einen //per Attrbute Consent// einstellen (''idp.consent.allowPerAttribute = true''). D.h. der Nutzer kann für jedes Attribut, das nicht explizit von SP über die Metadaten angefordert wird (mit dem Tag ''required="True"'' versehen), über eine Checkbox entscheiden, ob der Wert an den SP übertragen wird oder nicht
  
-Um das auf der Attribute-Release Seite zu berücksichtigen sind folgende zwei kleine Anpassungen vorzunehmen:+In der Default-Konfiguration des IdP werden mit dieser Einstellung auf der Attribute-Release Seite die required-Attribute nicht angezeigt.  
 +Folgende Anpassungen sind für eine Anzeige der required-Attribute vorzunehmen:
  
-  * Änderungen in der Datei ''views/intercept/attribute-release.vm'':+  * Ergänzung in der Datei ''views/intercept/attribute-release.vm''
 <code> <code>
 ... ...
Zeile 12: Zeile 13:
 ... ...
 </code> </code>
 + 
 +  * Im Velocity Template die Checkbox für non-required Attribute anzeigen. Required Attribute werden ohne Checkbox angezeigt. Dazu wird in der Datei ''views/intercept/attribute-release.vm'' folgende if-Anweisung ersetzt:
  
-FIXME: nachfolgende Anpassung der attribute-release.vm für IdP v5 aktualisieren.  +<code>
-  * Im Velocity Template die Checkbox nur für non-required Attribute anzeigen. Dazu die Datei ''views/intercept/attribute-release.vm''  anpassen: +
- +
-<file html4strict views/intercept/attribute-release.vm>+
 ... ...
-            <!-- Attribute Liste - Tabelle Start --> 
-            <table class="listing"> 
-                <thead> 
-                    <tr> 
-                        <th colspan="2"> 
-                            #springMessageText("idp.attribute-release.attributesHeader", "Information to be Provided to Service") 
-                        </th> 
-                        <th> 
-                            <!-- check / uncheck all --> 
-                            #if ($attributeReleaseFlowDescriptor.perAttributeConsentEnabled ) 
-                                <script language="JavaScript"> 
-                                function toggle(source) { 
-                                    checkboxes = document.getElementsByName('_shib_idp_consentIds'); 
-                                    for(var i=0, n=checkboxes.length;i<n;i++) { 
-                                        if(checkboxes[i].type != "hidden"){ 
-                                            checkboxes[i].checked = source.checked; 
-                                        } 
-                                    } 
-                                } 
-                                </script> 
-                                <input type="checkbox" onClick="toggle(this)" checked />#springMessageText("idp.attribute-release.ToggleAll", "Alle")<br/> 
-                            #end 
-                        </th> 
-                    </tr> 
-                </thead> 
-                <tbody> 
                     #foreach ($attribute in $attributeReleaseContext.getConsentableAttributes().values())                     #foreach ($attribute in $attributeReleaseContext.getConsentableAttributes().values())
-                        <tr> +                        #if ($attributeReleaseFlowDescriptor.perAttributeConsentEnabled) 
-                            <td+                            <fieldset
-                                $encoder.encodeForHTML($attributeDisplayNameFunction.apply($attribute)+                                <input id="$attribute.id" type="checkbox" name="_shib_idp_consentIds" value="$encoder.encodeForHTML($attribute.id)" checked
-                            </td+                                <label for="$attribute.id">$encoder.encodeForHTML($attributeDisplayNameFunction.apply($attribute))</label
-                            <td> +                        #else 
-                                #foreach ($value in $attribute.values) +                            <p>$encoder.encodeForHTML($attributeDisplayNameFunction.apply($attribute))</p
-                                    <strong>$encoder.encodeForHTML($value.getDisplayValue())</strong+                            <input id="$attribute.id" type="hidden" name="_shib_idp_consentIds" value="$encoder.encodeForHTML($attribute.id)"> 
-                                    <br /> +                        #end 
-                                #end +
-                            </td> +
-                            <td> +
-                                #if ($attributeReleaseFlowDescriptor.perAttributeConsentEnabled ) +
-                                    <!-- $attributeRequired.apply($attribute)) return "true" for required attributes --> +
-                                    #if (!$attributeRequired.apply($attribute)+
-                                        <!-- not required, allow to check separably --> +
-                                        #set ($inputType = "checkbox"+
-                                    #else +
-                                        <!-- required, don't allow to check separably --> +
-                                        #set ($inputType = "hidden"+
-                                        <!-- inform the user, that is a required attribute --> +
-                                        <strong>#springMessageText("idp.attribute-release.requiredLabel", "notwendig")</strong+
-                                    #end +
-                                #else +
-                                    #set ($inputType = "hidden"+
-                                #end +
-                                <input id="$attribute.id" type="$inputType" name="_shib_idp_consentIds" value="$encoder.encodeForHTML($attribute.id)" checked \> +
-                            </td+
-                        </tr> +
-                    #end +
-                </tbody>+
 ... ...
 +</code>
  
- +  durch:  
-</file> +<code>
- +
-  Damit auch die Internationalisierung klappt, müssen die Message Properties noch ergänzt werden. +
- +
-<file properties messages/messages.properties>+
 ... ...
-idp.attribute-release.ToggleAll Alle +                    #foreach ($attribute in $attributeReleaseContext.getConsentableAttributes().values()) 
-idp.attribute-release.requiredLabel notwendig+                        #if ($attributeReleaseFlowDescriptor.perAttributeConsentEnabled) 
 +                            <fieldset> 
 +                              #if ($isAttributeRequired.test($attribute)) 
 +                                <input id="$attribute.id" type="hidden" name="_shib_idp_consentIds" value="$encoder.encodeForHTML($attribute.id)"> 
 +                              #else 
 +                                <input id="$attribute.id" type="checkbox" name="_shib_idp_consentIds" value="$encoder.encodeForHTML($attribute.id)" checked> 
 +                              #end 
 +                                <label for="$attribute.id">$encoder.encodeForHTML($attributeDisplayNameFunction.apply($attribute))</label> 
 +                        #else 
 +                            <p>$encoder.encodeForHTML($attributeDisplayNameFunction.apply($attribute))</p> 
 +                            <input id="$attribute.id" type="hidden" name="_shib_idp_consentIds" value="$encoder.encodeForHTML($attribute.id)"> 
 +                        #end
 ... ...
- +</code>
- +
-</file>+
  
 Wird der AttributeQuery benutzt, muss auch hier der letzte Consent vom Nutzer beachtet werden. Dazu ist in ''conf/intercept/consent-intercept-config.xml''  für die Bean ''shibboleth.consent.AttributeQuery.Condition''  der parent Parameter auf den Wert ''shibboleth.Conditions.TRUE''  zu setzen, siehe hierzu unter [[de:shibidp:config-storage#user_consent_zu_attributfreigabe_bei_attribute_queries_beruecksichtigen|Server-Side-Storage, Sessions, User Consent und Persistent Identifier]]. Damit werden auch AttributeQueries gegen die zuletzt gespeicherte Nutzereinwilligung gefiltert. Hat der Nutzer nur einmal zugestimmt, werden keine Attribute übertragen. Wird der AttributeQuery benutzt, muss auch hier der letzte Consent vom Nutzer beachtet werden. Dazu ist in ''conf/intercept/consent-intercept-config.xml''  für die Bean ''shibboleth.consent.AttributeQuery.Condition''  der parent Parameter auf den Wert ''shibboleth.Conditions.TRUE''  zu setzen, siehe hierzu unter [[de:shibidp:config-storage#user_consent_zu_attributfreigabe_bei_attribute_queries_beruecksichtigen|Server-Side-Storage, Sessions, User Consent und Persistent Identifier]]. Damit werden auch AttributeQueries gegen die zuletzt gespeicherte Nutzereinwilligung gefiltert. Hat der Nutzer nur einmal zugestimmt, werden keine Attribute übertragen.
Zeile 95: Zeile 54:
 Für das Propagieren des zusätzlichen Objektes in den Attribute-Release-Flow ist leider ein Neustart des IdP nötig. Für das Propagieren des zusätzlichen Objektes in den Attribute-Release-Flow ist leider ein Neustart des IdP nötig.
  
- 
-{{tag>fixme}} 
  
  
  • Zuletzt geändert: vor 5 Monaten