Seite anzeigenÄltere VersionenLinks hierherNach oben Diese Seite ist nicht editierbar. Sie können den Quelltext sehen, jedoch nicht verändern. Kontaktieren Sie den Administrator, wenn Sie glauben, dass hier ein Fehler vorliegt. ====== 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, 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. 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: * Ergänzung in der Datei ''views/intercept/attribute-release.vm'' <code> ... #set ($requestClass = $attributeReleaseContext.getClass().forName("jakarta.servlet.http.HttpServletRequest")) #set ($isAttributeRequired = $attributeReleaseContext.getClass().forName("net.shibboleth.idp.consent.logic.impl.IsAttributeRequiredPredicate").getDeclaredConstructor($requestClass).newInstance($request)) ... </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: <code> ... #foreach ($attribute in $attributeReleaseContext.getConsentableAttributes().values()) #if ($attributeReleaseFlowDescriptor.perAttributeConsentEnabled) <fieldset> <input id="$attribute.id" type="checkbox" name="_shib_idp_consentIds" value="$encoder.encodeForHTML($attribute.id)" checked> <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> * durch: <code> ... #foreach ($attribute in $attributeReleaseContext.getConsentableAttributes().values()) #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> 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. 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 5 Monaten Anmelden