Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Nächste Überarbeitung
Vorhergehende Überarbeitung
Nächste ÜberarbeitungBeide Seiten der Revision
de:shibidp3per_attribute_consent_4_not_required [2017/04/04 13:52] – angelegt Petra Bergde:shibidp3per_attribute_consent_4_not_required [2019/12/18 08:35] – Ergänzung für AttributeQuery Filter Petra Berg
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 des IdP kann man einen 'per Attrbute Consenteinstellen. D.h. der Nutzer kann für jedes Attribut über eine Checkbox entscheiden, ob der Wert an den SP übertragen wird oder nicht.+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 entscheiden, ob 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. 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.
  
Zeile 7: Zeile 7:
 Um das auf der Attribute-Release Seite zu berücksichtigen sind folgende zwei kleine Anpassungen vorzunehmen: Um das auf der Attribute-Release Seite zu berücksichtigen sind folgende zwei kleine Anpassungen vorzunehmen:
  
-1. Eine schon vorhandene IdP-Class in das Velocity Template propagieren. Dazu ist die Datei ''system/flows/intercept/attribute_release_flow.xml'' wie folgt zu ergänzen:+  * Eine schon vorhandene IdP-Class in das Velocity Template propagieren. Dazu ist die Datei ''system/flows/intercept/attribute_release_flow.xml'' wie folgt zu ergänzen:
  
 <file xml system/flows/intercept/attribute-release_flow.xml> <file xml system/flows/intercept/attribute-release_flow.xml>
Zeile 31: Zeile 31:
  
  
-2. Im Velocity Template die Checkbox nur für non required Attribute anzeigen. Dazu die Datei ''views/intercept/attribute-release.vm'' anpassen:+  * Im Velocity Template die Checkbox nur für non-required Attribute anzeigen. Dazu die Datei ''views/intercept/attribute-release.vm'' anpassen:
  
 <file html views/intercept/attribute-release.vm> <file html 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())
 +                        <tr>
 +                            <td>
 +                                $encoder.encodeForHTML($attributeDisplayNameFunction.apply($attribute))
 +                            </td>
 +                            <td>
 +                                #foreach ($value in $attribute.values)
 +                                    <strong>$encoder.encodeForHTML($value.getDisplayValue())</strong>
 +                                    <br />
 +                                #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>
 +...
 +</file>
  
 +  * Damit auch die Internationalisierung klappt, müssen die Message Properties noch ergänzt werden.
  
 +<file properties messages/messages.properties>
 +...
 +idp.attribute-release.ToggleAll = Alle
 +idp.attribute-release.requiredLabel = notwendig
 +...
 </file> </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.
 +Damit werden auch AttributeQueries gegen die zuletzt gespeicherte Nutzereinwilligung gefiltert. Hat der Nutzer nur einmal zugestimmt,
 +werden keine Attribute übertragen.
 + 
 +Für das Propagieren des zusätzlichen Objektes in den Attribute-Release-Flow ist leider ein Neustart des IdP nötig.
  
  • Zuletzt geändert: vor 3 Jahren