Consent getriebene Synchronisation im GDPR Zeitalter

In einem kleinen Bespiel möchte ich gerne eine Grundforderung der neuen Europäischen Datenschutzreglung aufzeigen. Natürlich ist dies nur ein kleiner Ausschnitt, aber ein gutes Bespiel, wie einfach über ein User Dashboard der Benutzer einen Identity getriebenen Prozess ausführen kann. (Der Code zum Testen steht weiter unten und sollte ohne jegliche Gewähr gesehen werden!)

Zum Hintergrund: Das neue Forgerock Identity Management enthält einige Funktionen, die die Datengrundsatzverordung enthält. Hierzu zählen im Besonderen die Kundenzustimmung zur Nutzung von Benutzerdaten und den Bezug der Verarbeitung.

In meinem einfachen Beispiel gibt der Benutzer Zustimmung bestimmte Daten für bestimmte Prozesse freizugeben. Der Benutzer erhält eine UI Notifikation und eine zusätzliche E-Mail, wenn er zustimmt, bzw. wieder seine Zustimmung entzieht.

Beispiel User Dashboard „Privacy & Consent“

Der User löst eine LiveSynchronistation zu einem Zielsystem aus. Dieser Vorgang wird im sogenannten Mapping von IDM beschrieben. Um den Test hier zu erleichtern, nehme ich kein Externes Zielsystem sondern lege hierzu eine Marketing Consent Managed Object an. IDM hat nämlich die Eigenschaft beliebige „Managed Objects“ zu erstellen.

Manged Object für Marketing Consent Daten

Im Mapping werden nun die entsprechenden Attribute aus dem User Managed Object befüllt, und zwar Consent getrieben. Hierzu ist wichtig, das bei der Anlage des Mapping der Schalten Consent eingeschaltet wird. Dies weisst automatisch dem Mapping ein LiveSync für das Consent zu, da der Consent im User Attribute consentedMappings als Array gespeichert wird. Ein Rest Beispiel später.

Je nach Mapping Einstellungen werden Benutzer die Attribute zur Freigabe auch angezeigt. Um dies besser zu verdeutlichen, habe ich unterschiedliche Constent mit unterschiedlichen Attributen definiert.

Schaltet der Benutzer seine Erlaubnis frei (Regler ist an), wird ein Datensatz mit Attributen in das Managed Object MarketingConsent geschrieben, beziehungsweise wieder gelöscht. Wie gesagt, der Einfachheithalber habe ich ein Managed Object im IDM genommen, man könnte sich aber natürlich hier CRM, Datenbanken oder andere Ziele vorstellen.

Im Mapping habe ich einige Dinge verändert, um mich ein bisschen kreativ auszuspielen: Um mehrere Consent getriebene Mappings in ein Managed Object zu erstellen habe ich ein target queryfilter mit dem Namen des Consents eingegeben. Dabei wird ein Mapping also nur auf den bestimmten Filter reagieren und ich kann mehrere Mappings mit unterschiedlichen Constent in EINEN Managed Object verwirklichen. (Wie gesagt, hier nur zur Demo). Des Weiteren habe ich die Trigger OnCreate und OnDelete erstellt, um hier die Notification (email und UI) anzustossen eingetragen.

Beispiel Consent mit den Notification in der UI

Dies ist natürlich erst der Anfang und man kann sich sicherlich noch andere Einstellungen vorstellen.


Und hier der Hinweis falls Sie es selber gleich testen wollen:

  1. OpenIDM von https://backstage.forgerock.com in der aktuellen Version downloaden und installieren
  2. Erstellen des Managed Objects für den Marketing Consent
  3. Mapping (Beispiel) für den Consented Sync erstellen
  4. User in IDM Anlegen und einloggen
  5. Im User Dashboard unter Consent „BabyCare“ einschalten. Im dem Managed Object sollte jetzt vom User ein neuer Consent mit „BabyCare“ erstellt worden sein.

Hinweise: Email sollte konfiguriert sein (Da ein Email an den User gesendet wird.

Curl Command für die erstellung des Managed Objects in IDM:

curl -X PATCH \
 http://localhost:8080/openidm/config/managed \
 -H 'Cache-Control: no-cache' \
 -H 'Content-Type: application/json' \
 -H 'X-OpenIDM-Password: openidm-admin' \
 -H 'X-OpenIDM-Username: openidm-admin' \
 -d '[
 {
 "operation": "add",
 "field": "objects/-",
 "value":
 {
 "name": "marketingconsent",
 "schema": {
 "$schema": "http://forgerock.org/json-schema#",
 "type": "object",
 "title": "Marketing Consent",
 "description": "Consent Database",
 "icon": "fa-arrow-right",
 "properties": {
 "_id": {
 "title": "_id",
 "type": "string",
 "viewable": false,
 "searchable": false,
 "userEditable": false,
 "description": "",
 "minLength": "",
 "isVirtual": false
 },
 "name": {
 "title": "Name",
 "type": "string",
 "viewable": true,
 "searchable": true,
 "userEditable": true
 },
 "sn": {
 "title": "Lastname",
 "type": "string",
 "viewable": true,
 "searchable": true,
 "userEditable": true
 },
 "firstname": {
 "title": "Firstname",
 "type": "string",
 "viewable": true,
 "searchable": true,
 "userEditable": true
 },
 "consent": {
 "title": "Consent",
 "type": "boolean",
 "viewable": true,
 "searchable": false,
 "userEditable": true
 },
 "userid": {
 "title": "User ID",
 "type": "string",
 "viewable": true,
 "searchable": false,
 "userEditable": false,
 "description": "",
 "minLength": "",
 "isVirtual": false
 },
 "username": {
 "title": "Username",
 "type": "string",
 "viewable": true,
 "searchable": true,
 "userEditable": true,
 "description": "",
 "minLength": "",
 "isVirtual": false
 },
 "email": {
 "title": "Email",
 "type": "string",
 "viewable": true,
 "searchable": true,
 "userEditable": true
 },
 "mobile": {
 "title": "Mobile Phone",
 "type": "string",
 "viewable": true,
 "searchable": true,
 "userEditable": true
 },
 "city": {
 "title": "City",
 "type": "string",
 "viewable": true,
 "searchable": true,
 "userEditable": true
 },
 "accountnumber": {
 "title": "Account Number",
 "type": "string",
 "viewable": true,
 "searchable": true,
 "userEditable": true
 },
 "date": {
 "title": "Consent Date",
 "type": "string",
 "viewable": true,
 "searchable": true,
 "userEditable": false,
 "description": "",
 "minLength": ""
 }
 },
 "order": [
 "_id",
 "name",
 "sn",
 "firstname",
 "consent",
 "userid",
 "username",
 "email",
 "mobile",
 "city",
 "accountnumber",
 "date"
 ],
 "required": []
 },
 "iconClass": "fa fa-database",
 "type": "Managed Object"
 }
}
]
'

Curl Command für die Erstellung eines Beispiel Syncs:

curl -X PATCH \
 https://localhost:8080/openidm/config/sync \
 -H 'Cache-Control: no-cache' \
 -H 'Content-Type: application/json' \
 -H 'X-OpenIDM-Password: openidm-admin' \
 -H 'X-OpenIDM-Username: openidm-admin' \
 -d '[
 {
 "operation": "add",
 "field": "mappings/-",
 "value":
 {
 "target": "managed/marketingconsent",
 "source": "managed/user",
 "name": "BeautyCare",
 "consentRequired": true,
 "icon": null,
 "properties": [
 {
 "target": "email",
 "source": "mail"
 },
 {
 "target": "userid",
 "source": "_id"
 },
 {
 "target": "username",
 "source": "userName"
 },
 {
 "target": "consent",
 "default": true
 },
 {
 "target": "name",
 "default": "Beauty Care"
 },
 {
 "target": "date",
 "transform": {
 "type": "text/javascript",
 "globals": {},
 "source": "dateUtil = org.forgerock.openidm.util.DateUtil.getDateUtil(\"GMT\");\ndateUtil.now()"
 },
 "source": ""
 }
 ],
 "policies": [
 {
 "action": "EXCEPTION",
 "situation": "AMBIGUOUS"
 },
 {
 "action": "EXCEPTION",
 "situation": "SOURCE_MISSING"
 },
 {
 "action": "EXCEPTION",
 "situation": "MISSING"
 },
 {
 "action": "EXCEPTION",
 "situation": "FOUND_ALREADY_LINKED"
 },
 {
 "action": "DELETE",
 "situation": "UNQUALIFIED"
 },
 {
 "action": "EXCEPTION",
 "situation": "UNASSIGNED"
 },
 {
 "action": "EXCEPTION",
 "situation": "LINK_ONLY"
 },
 {
 "action": "IGNORE",
 "situation": "TARGET_IGNORED"
 },
 {
 "action": "IGNORE",
 "situation": "SOURCE_IGNORED"
 },
 {
 "action": "IGNORE",
 "situation": "ALL_GONE"
 },
 {
 "action": "UPDATE",
 "situation": "CONFIRMED"
 },
 {
 "action": "UPDATE",
 "situation": "FOUND"
 },
 {
 "action": "CREATE",
 "situation": "ABSENT"
 }
 ],
 "targetQuery": {
 "_queryFilter": "name eq \"Beauty Care\""
 },
 "onCreate": {
 "type": "text/javascript",
 "globals": {},
 "source": "dateUtil = org.forgerock.openidm.util.DateUtil.getDateUtil(\"GMT\");\nportalname = \"Beauty Care\";\n\n// send email to user\nemailParams = {\n \"from\" : '\''admin@example.com'\'',\n \"to\" : source.mail,\n \"subject\" : '\''Registrierung Adhesive Technology'\'',\n \"type\" : '\''text/plain'\'',\n \"body\" : '\''Vielen Danke für die Registrierung bei '\'' + portalname\n };\n\n// set ui notification as well\nopenidm.action(\"external/email\", \"send\", emailParams);\n\n// send notification\nvar params = {\n \"receiverId\": source._id,\n \"requesterId\" : \"\",\n \"requester\" : \"\",\n \"createDate\" : dateUtil.now(),\n \"notificationType\" : \"info\",\n \"notificationSubtype\" : \"\",\n \"message\" : \"Registrierung \" + portalname\n};\n\nopenidm.create(\"repo/ui/notification/\", null, params);\n"
 },
 "onDelete": {
 "type": "text/javascript",
 "globals": {},
 "source": "dateUtil = org.forgerock.openidm.util.DateUtil.getDateUtil(\"GMT\");\nportalname = \"Beauty Care\";\n\n// send email to user\nemailParams = {\n \"from\" : '\''admin@example.com'\'',\n \"to\" : source.mail,\n \"subject\" : '\''Abmeldung Adhesive Technology'\'',\n \"type\" : '\''text/plain'\'',\n \"body\" : '\''Abmeldung bei '\'' + portalname\n };\n\n// set ui notification as well\nopenidm.action(\"external/email\", \"send\", emailParams);\n\n// send notification\nvar params = {\n \"receiverId\": source._id,\n \"requesterId\" : \"\",\n \"requester\" : \"\",\n \"createDate\" : dateUtil.now(),\n \"notificationType\" : \"info\",\n \"notificationSubtype\" : \"\",\n \"message\" : \"Abmeldung \" + portalname\n};\n\nopenidm.create(\"repo/ui/notification/\", null, params);\n"
 }
 }
}
]
'

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.