Mailänderung mit Verifizierung in IDM 6.5

In diesem Szenario kann ein Benutzer seine Mail Adresse selbst ändern. Da die Mailadresse meistens eine besondere Aufgabe erfüllt, wollen wir vor dem ändern der Mail eine Bestätigung des Benutzers erreichen, um nur geprüfte Änderungen zuzulassen. Dies wird durch einen Validierungslink im Mail zur neuen Adresse erreicht. Erst wenn die Validierung erfolgt ist, wird die neue Mail Adresse zum Benutzerprofil geändert und die internen Validierungsdaten gelöscht.

[bogo]

Forgerock IDM 6.5 bietet eine Reihe von vorgefertigten Self-Service Bausteinen an. Dieser Anwendungsfall ist nicht standartmäßig implementiert. Hier soll aufgezeigt werden, wie einfach es ist, kundenbezogne Anwändungsfälle zu implementieren.

Um dies aufzuzeigen wurden einige Konfigurationen geändert. Die Voraussetzungen unten, sollen dies verdeutlichen.

Benutzer Flow

User Flow

Voraussetzungen:

  1. als Basis wurde der Beispielcode unter samples/sync-with-csv verwendet
  2. mailHelper.js Datei unter ./script erstellt
  3. emailTemplate-verifyChange.json Datei in ./conf erstellt
  4. neue Objektkonfiguration in managed.json unter ./conf
  5. custom rest endpoint mailvalidation unter ./conf und ./script
  6. Mail Konfiguration um mails zu senden ./conf (smtp config)
  7. access.js unter ./script um den custom rest endpoint aufrufen zu können (für die Mailvalidierung)

Detailbeschreibung des Flows

1. Benutzer ändert seine Mailadresse im Benutzer Dashboard:

Benutzer logged sich unter http://localhost:8080/#/profile ein und ändert seine Mailadresse. Es wird ein Script „onUpdate“ für das Managed User Object angestossen.

onUpdate script (dies wird immer ausgeführt, sollte sich ein Benutzerprofil ändern):

require('onUpdateUser').preserveLastSync(object, oldObject, request);require('mailHelper').checkChange(context, 'mail', object, oldObject);

onUpdate wird von mailHelper.js (.script/) aufgerufen und erzeugt im Benutzer folgendes:

"verificationData": {
                "mail": {
                    "code": 72594,
                    "value": "bjensen@test4.com"
                }
            }

HINWEIS: Die alte Mailadresse im Attribut mail wird nicht geändert. Vielmehr sind die neue Mailadresse mit Validierungscode unter verificationData.mail zu finden.

Mail wird zur neuen Mailadresse versandt. In der Mail enthalten ist eine URL die der Benutzer anklicken kann, um die neue Mailadresse zu verifizieren.

Code Ausschnitt für den Mailversand:

Es wird hier ein Mail Template verwendet, anstelle es „hardcoded“ in die Funktion einzubauen. Hierfür reicht eine JSON Datei im Conf Verzeichnis des IDM Projektes. Es reicht einfach die JSON als emailTemplate-meinTemplateName.json abzuspeichern.

var emailConfig = openidm.read("config/external.email"),
    Handlebars = require('lib/handlebars'),
    emailTemplate = openidm.read("config/emailTemplate/verifyChange");

// revert the change to the attribute, pending verification
object[attribute] = oldObject[attribute];

// copied from onCreateUser.emailUser()
var email,
    template,
    locale = emailTemplate.defaultLocale;

email =  {
    "from": emailTemplate.from || emailConfig.from,
    "to": object.verificationData[attribute].value,
    "subject": emailTemplate.subject[locale],
    "type": "text/html"
};

template = Handlebars.compile(emailTemplate.message[locale]);

email.body = template({
    "object": object,
    "verification": object.verificationData[attribute]
 });

// do NOT wait for completion, so that this call will succeed even if email fails to send
openidm.action("external/email", "send", email, { waitForCompletion: false });

Die Validation kann einfach über einen Curl Command oder über Postman ausprobiert werden:

2. Benutzer empfängt eine mail mit dem Validation Link

endpoint/mailvalidation Beispiel:

{{host}}:{{port}}/openidm/endpoint/mailvalidation?code=72594&userid=bjensen

Der Aufruf vergleicht die Parameter mit dem Benutzerprofil gespeicherten Validierungsdaten (Benutzerid: userid=bjensen), sind diese korrekt werden die Validierungsdaten gelöscht und das Attribute mail auf die neue Mailadresse gesetzt.

Thanks to

Jake for initial scripts (especialliy to call the mail template!!!)

Der komplette IDM Projektcode ist öffentlich auf Stash zu erreichen.

Use of this code requires a commercial software license with ForgeRock AS. or with one of its affiliates. All use shall be exclusively subject to such license between the licensee and ForgeRock AS.

Copyright 2014-2017 ForgeRock AS. All Rights Reserved

Forgerock Copyright

Hier das ursprünglich verwendete Template: One-Way Sync With CSV Sample

This sample demonstrates reconciliation between a CSV file and the managed/user repository. For documentation relating to this sample, see https://backstage.forgerock.com/docs/idm/6.5/samples-guide#chap-sync-with-csv Source Code of this example is under https://stash.forgerock.org/users/hanns.nolan/repos/openidm65-mailchange-example/browse

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.