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:shibidp3per_attribute_consent_4_not_required [2017/04/04 14:35]
Petra Berg idp.properties für perAttribute consent ergänzt
de:shibidp3per_attribute_consent_4_not_required [2020/10/15 12:35] (aktuell)
Silke Meyer
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 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. +
  
 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:
  
-  * 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>
 ... ...
 111 <!-- Display attribute release page. --> 111 <!-- Display attribute release page. -->
-112 +112
 113 <view-state id="DisplayAttributeReleasePage" view="#{flowRequestContext.activeFlow.id}"> 113 <view-state id="DisplayAttributeReleasePage" view="#{flowRequestContext.activeFlow.id}">
 114   <on-render> 114   <on-render>
Zeile 20: Zeile 18:
 118     <evaluate expression="flowRequestContext.getExternalContext().getNativeResponse()" result="viewScope.response" /> 118     <evaluate expression="flowRequestContext.getExternalContext().getNativeResponse()" result="viewScope.response" />
 119     <evaluate expression="opensamlProfileRequestContext" result="viewScope.profileRequestContext" /> 119     <evaluate expression="opensamlProfileRequestContext" result="viewScope.profileRequestContext" />
-120     <evaluate expression="new net.shibboleth.idp.consent.logic.impl.AttributeDisplayNameFunction(flowRequestContext.getExternalContext().getNativeRequest(), FallbackLanguages)" +120     <evaluate expression="new net.shibboleth.idp.consent.logic.impl.AttributeDisplayNameFunction(flowRequestContext.getExternalContext().getNativeRequest(), FallbackLanguages)"
 121               result="viewScope.attributeDisplayNameFunction" /> 121               result="viewScope.attributeDisplayNameFunction" />
-122     <evaluate expression="new net.shibboleth.idp.consent.logic.impl.AttributeDisplayDescriptionFunction(flowRequestContext.getExternalContext().getNativeRequest(), FallbackLanguages)" +122     <evaluate expression="new net.shibboleth.idp.consent.logic.impl.AttributeDisplayDescriptionFunction(flowRequestContext.getExternalContext().getNativeRequest(), FallbackLanguages)"
 123               result="viewScope.attributeDisplayDescriptionFunction" /> 123               result="viewScope.attributeDisplayDescriptionFunction" />
 124     <!-- Get RequiredPredicate object as $attributeRequired in velocity template --> 124     <!-- Get RequiredPredicate object as $attributeRequired in velocity template -->
-125     <evaluate expression="new net.shibboleth.idp.consent.logic.impl.IsAttributeRequiredPredicate(flowRequestContext.getExternalContext().getNativeRequest())" +125     <evaluate expression="new net.shibboleth.idp.consent.logic.impl.IsAttributeRequiredPredicate(flowRequestContext.getExternalContext().getNativeRequest())"
 126               result="viewScope.attributeRequired" /> 126               result="viewScope.attributeRequired" />
 ... ...
-</file> 
  
  
-  * Im Velocity Template die Checkbox nur für non-required Attribute anzeigen. Dazu die Datei ''views/intercept/attribute-release.vm'' anpassen:+</file>
  
-<file html views/intercept/attribute-release.vm>+  * 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 --> +            <!-- Attribute Liste - Tabelle Start -->
             <table class="listing">             <table class="listing">
                 <thead>                 <thead>
Zeile 51: Zeile 50:
                                         if(checkboxes[i].type != "hidden"){                                         if(checkboxes[i].type != "hidden"){
                                             checkboxes[i].checked = source.checked;                                             checkboxes[i].checked = source.checked;
-                                        }    +                                        } 
-                                    }    +                                    } 
-                                }   +                                }
                                 </script>                                 </script>
                                 <input type="checkbox" onClick="toggle(this)" checked />#springMessageText("idp.attribute-release.ToggleAll", "Alle")<br/>                                 <input type="checkbox" onClick="toggle(this)" checked />#springMessageText("idp.attribute-release.ToggleAll", "Alle")<br/>
Zeile 78: Zeile 77:
                                         <!-- not required, allow to check separably -->                                         <!-- not required, allow to check separably -->
                                         #set ($inputType = "checkbox")                                         #set ($inputType = "checkbox")
-                                    #else +                                    #else
                                         <!-- required, don't allow to check separably -->                                         <!-- required, don't allow to check separably -->
                                         #set ($inputType = "hidden")                                         #set ($inputType = "hidden")
Zeile 93: Zeile 92:
                 </tbody>                 </tbody>
 ... ...
 +
 +
 </file> </file>
  
Zeile 102: Zeile 103:
 idp.attribute-release.requiredLabel = notwendig 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, siehe hierzu unter [[:de:shibidp3storage#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.
  
 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.
 +
 +Wer sich davor scheut, den System Flow zu editieren, kann die Referenz auch direkt im Velocity Template holen. Das ist nicht unbedingt schön, aber funktional getestet mit dem IDP4. Das Instanziieren eines neuen Objekts ist in Velocity nicht vorgesehen, deswegen sieht der Code etwas abenteuerlich aus. Die Änderungen beschränken sich dann auf die Datei views/intercept/attribute-release.vm:
 +<code>
 +
 +...
 +#set ($requestClass = $attributeReleaseContext.getClass().forName("javax.servlet.http.HttpServletRequest"))
 +#set ($isAttributeRequired = $attributeReleaseContext.getClass().forName("net.shibboleth.idp.consent.logic.impl.IsAttributeRequiredPredicate").getDeclaredConstructor($requestClass).newInstance($request))
 +...
 +
 +</code>
 +
 +<code>
 +...
 +   <td style="vertical-align: top">
 +                                        #if ($attributeReleaseFlowDescriptor.perAttributeConsentEnabled && !($isAttributeRequired.apply($attribute)))
 +                                            #set ($inputType = "checkbox")
 +                                        #else
 +                                            #set ($inputType = "hidden")
 +                                        #end
 +                                        <input id="$attribute.id" type="$inputType" name="_shib_idp_consentIds" value="$encoder.encodeForHTML($attribute.id)" checked>
 +...
 +
 +</code>
 +
 +Das Statement $isAttributeRequired.apply($attribute) produziert beim IDP4 eine Deprecation Warnung und muss durch $isAttributeRequired.test($attribute) ersetzt werden. Das gilt vermutlich auch für die Anleitung oben mit dem System flow.
 +
 +{{tag>idp3 fixme moveme}}
 +
  
  • Zuletzt geändert: vor 4 Jahren