Der Countdown läuft für die Keyfactor Tech Days | Sichern Sie sich noch heute Ihren Platz!

MIM-Workflow-Aktivitätsbibliothek (MIMWAL)

Die Erstellung benutzerdefinierter Aktivitäten in Forefront Identity Manager (jetzt Microsoft Identity Manager) erforderte ein Verständnis der Programmierung in C# oder VB.Net und der Funktionsweise von Windows Workflow Foundation.

Microsoft hat vor kurzem die MIMWAL (MIM Workflow Activity Library) veröffentlicht, mit der Sie viele der Dinge tun können, die eine benutzerdefinierte Aktivität tun könnte, ohne Kenntnisse in der Programmierung einer .Net-Sprache haben zu müssen.

Es ist ein großartiges Instrument, aber es ist nicht ganz einfach zu verstehen, wie man es benutzt. Ich hatte das Glück, vor kurzem an einem Projekt mit dem Autor von MIMWAL zu arbeiten, und dachte, ich würde ein paar gängige Szenarien vorstellen, um die Leute mit seiner Verwendung vertraut zu machen.

Lesen einer Ressource

Bei der Erstellung benutzerdefinierter Arbeitsabläufe ist eines der ersten Dinge, die jeder tun muss, das Lesen einer Ressource. Um dies in MIMWAL zu tun, verwenden Sie die Aktivität "Ressourcen aktualisieren". Diese Aktivität wird in MIMWAL-Projekten sehr häufig verwendet, da sie das Lesen von Ressourcen und das Hinzufügen von Werten zu Workflow-Daten ermöglicht, die dann zur Aktualisierung einer Ressource verwendet werden können.

In der nachstehenden Aktualisierungsaktivität für die Ressource wird im Teil "Abfragen" der XPath für die Abfrage des Standortobjekts "Default" festgelegt. Und diese XPath-Abfrage wird in den Schlüssel "DefaultLocation" eingefügt.

SV1

Im Abschnitt "Aktualisierungen" wird dieser XPath dann über [//Queries/DefaultLocation] verwendet, um den Wert aus der Ausführung der XPath-Abfrage in die Variable $DefaultLocation zu setzen. $DefaultLocation wird dann (in der zweiten Zeile) auf den Wert der Variablen [//WorkflowData/DefaultLocation] gesetzt. Dadurch kann der Wert in nachfolgenden Aktivitäten im Workflow durch Aufruf von [//WorkflowData/DefaultLocation] verwendet werden.

SV2

Die obige Grafik zeigt auch, dass eine Variable gesetzt werden kann, indem man ihr direkt einen String-Wert gibt.

"@domain.com" wird der in [//WorkflowData/SMTPDomain] gespeicherte Wert sein.

Eine andere Möglichkeit, Attribute zu setzen, ist die Verwendung eines XPath-Filters im Abschnitt "Aktualisierungen" im "Wertausdruck".

Zum Beispiel:

IIF([IsPresent([//Ziel/Ort]),[//Ziel/Ort], "Default") )

Gibt den Wert im Location-Attribut des Ziels zurück, wenn es vorhanden ist, andernfalls wird die Zeichenfolge "Default" zurückgegeben.

Effektive und Delta-Lookups

Es gibt zwei nützliche Nachschlagefunktionen, die ich in einem Arbeitsablauf verwendet habe, um zu überprüfen, ob eine Landesvorwahl für einen Benutzer vorhanden war. Das Attribut "Ländercode" wurde neu eingeführt, um die Anforderung zu erfüllen, dass ein Ländercode vorhanden sein muss, wenn der Wert "Telefon" vorhanden ist. Viele Benutzer hatten jedoch bereits ein Telefonattribut. Der Autorisierungs-Workflow musste diese Szenarien abdecken:

  • Benutzer mit einem vorhandenen Telefonattribut fügt eine Landesvorwahl hinzu.
  • Der Benutzer gibt ein neues Telefonattribut (oder ändert ein bestehendes) und die Landesvorwahl ein.
  • Der Benutzer gibt ein Telefonattribut ein (oder ändert ein bestehendes) und keine Landesvorwahl.
  • Der Benutzer löscht ein Telefonattribut.

Die Delta-Suche liefert den Wert für das Attribut, das im Anfrageparameter enthalten ist.

Die effektive Suche funktioniert in AuthZ-Workflows, um den Wert zurückzugeben, den das Attribut haben würde, nachdem die Anfrage bestätigt wurde (dies wäre derselbe Wert wie Delta, wenn das Attribut während dieser Anfrage geändert wird, andernfalls ist es der aktuelle Wert auf dem Ziel).

Die erste Stufe des AuthZ-Workflows besteht also darin, eine Aktivität Ressourcen aktualisieren zu verwenden, um einige Variablen zu setzen:

SV3

Die Value Expressions setzen boolesche Werte für das Vorhandensein von Daten im Delta (was in der Anfrage enthalten ist), im Target (was derzeit beim Benutzer vorhanden ist) und im Effective (was der Ländercode nach der Verarbeitung der Anfrage sein wird).

Außerdem überprüfen wir, ob nach der Bearbeitung der Anfrage ein Wert für Office Phone vorhanden ist. Wir verwenden dies im nächsten Schritt: die Anfrage überprüfen in der Bedingung für die Ausführung der Aktivität.

Hier ist der Überprüfungsantrag:

SV4

Die Ausführungsbedingung für die Aktivität prüft, ob das Attribut "Telefon" einen Wert hat, nachdem die Anfrage übermittelt wurde (der effektive Wert). Ist dies nicht der Fall, wird der Antrag auf Überprüfung angenommen. Ist dies der Fall, werden die Bedingungen der Erforderlichen Anfrage geprüft.

Hier ist die Bedingung für die Ausführung der Aktivität:

ConvertToBoolean([//WorkflowData/EffectiveOfficePhone])

Anhand der erforderlichen Anforderungsbedingungen wird festgestellt, ob die Daten gültig sind. Wenn die Bedingung nicht erfüllt ist, wird die Meldung in der "Ablehnungsmeldung" zurückgegeben und der Zugriff verweigert.

Bei den obigen Anforderungsbedingungen wird zunächst geprüft, ob entweder der Delta-Ländercode oder der Zielländercode vorhanden ist. Wenn einer von beiden vorhanden ist, ist die Anfrage für diese Bedingung gültig:

Or(Eq([//WorkflowData/DeltaCountryCode],True),Eq([//WorkflowData/TargetCountryCode],True)

Die nächste Gültigkeitsprüfung besteht darin, dass die gültige Landesvorwahl vorhanden ist oder das Bürotelefon nicht vorhanden ist (denn wenn das Telefon gelöscht wird, ist die Landesvorwahl nicht erforderlich).

Or(Eq([//WorkflowData/EffectiveCountryCode],True),Eq([//WorkflowData/EffectiveOfficePhone],False)

Wenn beide Bedingungsprüfungen erfolgreich sind, ist die Autorisierung gültig. Schlägt eine der beiden Prüfungen fehl, wird die Anfrage verweigert und der Wert in der zurückgegebenen Meldung "Zugriff verweigert" entspricht dem Wert der ersten fehlgeschlagenen Anfrage.

MIMWAL ist ein superpraktisches Tool, mit dem sich komplexe Arbeitsabläufe viel einfacher und schneller erstellen lassen. Ich freue mich darauf, es bei zukünftigen Projekten einzusetzen.