Konfiguration

Das Modul AdActions enthält die Konfiguration für alle Assistenten dieser Erweiterung. Unten findest du zunächst das Konfigurationsschema mit Beschreibungen zu den einzelnen Werten – gefolgt von einer vollständigen Beispielkonfiguration.

Das Konfigurationsschema

Module

AdActions

List

Server

Complex list definition

Value

Label

String

  • Must not be empty.

Value

ContextMatch

StringList

  • Must match this regular expression: [-_a-z0-9.]+                        

Value

Domain

String

  • Maximum length: 1024

  • Must match this regular expression: [-_a-z0-9.]+                        

Value

UserSearchRoot

String

  • Maximum length: 1024

Value

UserSearchAttribute

Optional

String

  • Must be one of this: sAMAccountName, userPrincipalName, cn

Default Value:

sAMAccountName

Value

Host

Optional

String

  • Must match this regular expression: [-_:.a-z0-9]+                        

  • Maximum length: 250

Value

Port

Optional

Integer

  • Minimum value: 0

  • Maximum value: 65535

Default Value:

0

Value

SSL

Optional

Boolean

Default Value:

false

Value

Username

Optional

String

  • Maximum length: 250

Value

Password

Optional

Password

Value

MinimumPasswordLength

Optional

Integer

  • Minimum value: 1

  • Maximum value: 1024

Default Value:

4

Value

MaximumPasswordLength

Optional

Integer

  • Minimum value: 8

  • Maximum value: 1024

Default Value:

64

Value

AllowRandomPassword

Optional

Boolean

Default Value:

Yes

Value

AllowCustomPassword

Optional

Boolean

Default Value:

Yes

Value

CustomPasswordScript

Optional

String

Die Liste Server

In der Liste Server definierst du alle Active Directory-Server, mit denen die Erweiterung arbeiten soll. Für jeden Server wird ein eigener Eintrag benötigt. Wenn mehrere Einträge vorhanden sind, wählt der Assistent automatisch den passenden Server anhand des Werts ContextMatch.

Das folgende Beispiel zeigt zwei konfigurierte Server:

<Module name="AdActions">
    <List name="Server">
        <ListEntry>
            <Value name="Label">Server A</Value>
            <Value name="ContextMatch">context_a</Value>
            <Value name="Domain">section-a.example.com</Value>
            <Value name="SSL">Yes</Value>
            <Value name="UserSearchRoot"></Value>
        </ListEntry>
        <ListEntry>
            <Value name="Label">Server B</Value>
            <Value name="ContextMatch">context_b</Value>
            <Value name="Domain">section-b.example.com</Value>
            <Value name="SSL">Yes</Value>
            <Value name="UserSearchRoot"></Value>
        </ListEntry>
    </List>
    (...)
</Module>

Der Wert Label

Der Wert Label definiert eine frei wählbare Bezeichnung für den Servereintrag. Diese hat keine funktionale Bedeutung, erscheint jedoch in Protokollmeldungen und dient zur besseren Lesbarkeit bei der Analyse.

<Module name="AdActions">
    <List name="Server">
        <ListEntry>
            <Value name="Label">Server A</Value>
            <Value name="ContextMatch">context_a</Value>
            <Value name="Domain">section-a.example.com</Value>
            <Value name="SSL">Yes</Value>
            <Value name="UserSearchRoot"></Value>
        </ListEntry>
        <ListEntry>
            <Value name="Label">Server B</Value>
            <Value name="ContextMatch">context_b</Value>
            <Value name="Domain">section-b.example.com</Value>
            <Value name="SSL">Yes</Value>
            <Value name="UserSearchRoot"></Value>
        </ListEntry>
    </List>
    (...)
</Module>

Der Wert ContextMatch

Mit dem Wert ContextMatch legst du fest, bei welchem Benutzerkontext ein Servereintrag verwendet werden soll. Es handelt sich dabei um eine durch Leerzeichen getrennte Liste von Kontextnamen. Die Groß- und Kleinschreibung wird dabei ignoriert.

Wenn einer der angegebenen Werte mit dem Kontext des Benutzerkontos übereinstimmt, wird dieser Servereintrag verwendet. Gibt es keinen passenden Treffer, wird automatisch der erste Eintrag in der Liste genutzt.

<Module name="AdActions">
    <List name="Server">
        <ListEntry>
            <Value name="Label">Server A</Value>
            <Value name="ContextMatch">
                context_a1
                context_a2
                context_a3
            </Value>
            <Value name="Domain">section-a.example.com</Value>
            <Value name="SSL">Yes</Value>
            <Value name="UserSearchRoot"></Value>
        </ListEntry>
        <ListEntry>
            <Value name="Label">Server B</Value>
            <Value name="ContextMatch">context_b</Value>
            <Value name="Domain">section-b.example.com</Value>
            <Value name="SSL">Yes</Value>
            <Value name="UserSearchRoot"></Value>
        </ListEntry>
    </List>
    (...)
</Module>

Der Wert Domain

Mit dem Wert Domain gibst du den vollständig qualifizierten DNS-Namen des Active Directory-Servers an. Dieser Name wird automatisch in den passenden LDAP-Pfad umgewandelt.

Beispiel: Aus dem DNS-Namen example.com wird der LDAP-Pfad DN=example,DN=com generiert. Dieser Pfad wird anschließend allen LDAP-Anfragen vorangestellt.

<Module name="AdActions">
    <List name="Server">
        <ListEntry>
            <Value name="Label">Server A</Value>
            <Value name="ContextMatch">context_a</Value>
            <Value name="Domain">section-a.example.com</Value>
            <Value name="SSL">Yes</Value>
            <Value name="UserSearchRoot"></Value>
        </ListEntry>
        <ListEntry>
            <Value name="Label">Server B</Value>
            <Value name="ContextMatch">context_b</Value>
            <Value name="Domain">section-b.example.com</Value>
            <Value name="SSL">Yes</Value>
            <Value name="UserSearchRoot"></Value>
        </ListEntry>
    </List>
    (...)
</Module>

Der Wert UserSearchRoot

Mit dem Wert UserSearchRoot kannst du die Suche nach Benutzerkonten auf einen bestimmten Bereich innerhalb des Verzeichnisses eingrenzen. Du gibst dazu einen gültigen LDAP-Basis-Pfad an – z. B. CN=Users für alle Benutzerobjekte in der Standardstruktur oder OU=Admins für eine bestimmte Organisationseinheit.

Lässt du diesen Wert leer, wird das gesamte Verzeichnis nach dem Benutzer durchsucht.

<Module name="AdActions">
    <List name="Server">
        <ListEntry>
            <Value name="Label">User Server</Value>
            <Value name="ContextMatch">user_context</Value>
            <Value name="Domain">users.example.com</Value>
            <Value name="SSL">Yes</Value>
            <Value name="UserSearchRoot">CN=Users</Value>
        </ListEntry>
        <ListEntry>
            <Value name="Label">Admin Server</Value>
            <Value name="ContextMatch">admin_context</Value>
            <Value name="Domain">admins.example.com</Value>
            <Value name="SSL">Yes</Value>
            <Value name="UserSearchRoot">OU=Admins</Value>
        </ListEntry>
    </List>
    (...)
</Module>

Der Wert UserSearchAttribute

Mit dem optionalen Wert UserSearchAttribute bestimmst du, welches Attribut beim Durchsuchen des Active Directory für die Benutzeridentifikation verwendet wird. Standardmäßig wird sAMAccountName verwendet.

Folgende Werte sind möglich:

  • sAMAccountName – Standard-Loginname (empfohlen)

  • userPrincipalName – vollständiger Benutzername inkl. Domäne

  • cn – Common Name des Benutzerobjekts

Wenn du dir unsicher bist, lass den Wert einfach weg – der Standard ist in den meisten Fällen ausreichend.

<Module name="AdActions">
    <List name="Server">
        <ListEntry>
            <Value name="Label">Server</Value>
            <Value name="ContextMatch">context</Value>
            <Value name="Domain">example.com</Value>
            <Value name="SSL">Yes</Value>
            <Value name="UserSearchRoot"></Value>
            <Value name="UserSearchAttribute">userPrincipalName</Value>
        </ListEntry>
    </List>
    (...)
</Module>

Der Wert Host

Mit dem optionalen Wert Host kannst du einen alternativen Servernamen für die Verbindung zum Active Directory festlegen. Das ist vor allem dann hilfreich, wenn der Verbindungsname vom Domänennamen abweicht oder du gezielt einen bestimmten Server ansprechen möchtest.

<Module name="AdActions">
    <List name="Server">
        <ListEntry>
            <Value name="Label">Server</Value>
            <Value name="ContextMatch">context</Value>
            <Value name="Domain">example.com</Value>
            <Value name="SSL">Yes</Value>
            <Value name="UserSearchRoot"></Value>
            <Value name="Host">ad.example.com</Value>
            <Value name="Port">636</Value>
            <Value name="Username">assistant_user</Value>
            <Value name="Password">***</Value>
        </ListEntry>
    </List>
    (...)
</Module>

Der Wert Port

Mit dem optionalen Wert Port legst du den Netzwerkport fest, über den die Verbindung zum Active Directory-Server aufgebaut wird. Wird dieser Wert nicht angegeben, verwendet das System automatisch den Standardport – je nach Konfiguration mit oder ohne SSL:

  • 389 für unverschlüsselte Verbindungen

  • 636 für SSL-verschlüsselte Verbindungen

<Module name="AdActions">
    <List name="Server">
        <ListEntry>
            <Value name="Label">Server</Value>
            <Value name="ContextMatch">context</Value>
            <Value name="Domain">example.com</Value>
            <Value name="SSL">Yes</Value>
            <Value name="UserSearchRoot"></Value>
            <Value name="Host">ad.example.com</Value>
            <Value name="Port">636</Value>
            <Value name="Username">assistant_user</Value>
            <Value name="Password">***</Value>
        </ListEntry>
    </List>
    (...)
</Module>

Der Wert SSL

Mit dem Wert SSL gibst du an, ob die Verbindung zum Active Directory-Server verschlüsselt erfolgen soll. Standardmäßig ist dieser Wert deaktiviert (No), was eine unverschlüsselte Verbindung bedeutet. Um die Kommunikation abzusichern, setzt du den Wert auf Yes.

Für verschlüsselte Verbindungen wird typischerweise Port 636 verwendet. Achte darauf, dass der angegebene Port mit deiner SSL-Einstellung übereinstimmt.

<Module name="AdActions">
    <List name="Server">
        <ListEntry>
            <Value name="Label">Server</Value>
            <Value name="ContextMatch">context</Value>
            <Value name="Domain">example.com</Value>
            <Value name="SSL">Yes</Value>
            <Value name="UserSearchRoot"></Value>
            <Value name="Host">ad.example.com</Value>
            <Value name="Port">636</Value>
            <Value name="Username">assistant_user</Value>
            <Value name="Password">***</Value>
        </ListEntry>
    </List>
    (...)
</Module>

Der Wert Username

Mit dem optionalen Wert Username kannst du einen bestimmten Benutzernamen angeben, um dich mit abweichenden Anmeldeinformationen am Active Directory-Server zu authentifizieren. Dieser Wert ist nur erforderlich, wenn die Verbindung nicht mit dem Standardbenutzer des Systems erfolgen soll.

<Module name="AdActions">
    <List name="Server">
        <ListEntry>
            <Value name="Label">Server</Value>
            <Value name="ContextMatch">context</Value>
            <Value name="Domain">example.com</Value>
            <Value name="SSL">Yes</Value>
            <Value name="UserSearchRoot"></Value>
            <Value name="Host">ad.example.com</Value>
            <Value name="Port">636</Value>
            <Value name="Username">assistant_user</Value>
            <Value name="Password">***</Value>
        </ListEntry>
    </List>
    (...)
</Module>

Der Wert Password

Der Wert Password wird nur benötigt, wenn du auch einen Username angibst. Aus Sicherheitsgründen solltest du hier niemals ein Passwort im Klartext eintragen.

Stattdessen empfehlen wir, das Passwort zu verschlüsseln. Eine Anleitung dazu findest du im Abschnitt Kodieren von Passwörtern.

<Module name="AdActions">
    <List name="Server">
        <ListEntry>
            <Value name="Label">Server</Value>
            <Value name="ContextMatch">context</Value>
            <Value name="Domain">example.com</Value>
            <Value name="SSL">Yes</Value>
            <Value name="UserSearchRoot"></Value>
            <Value name="Host">ad.example.com</Value>
            <Value name="Port">636</Value>
            <Value name="Username">assistant_user</Value>
            <Value name="Password">***</Value>
        </ListEntry>
    </List>
    (...)
</Module>

Passwortkonfiguration

Mit den folgenden Werten legst du fest, wie ein neues Passwort auf der dritten Seite des AdResetPassword-Assistenten erzeugt werden kann – sowohl bei Verwendung des Passwortgenerators als auch bei der Eingabe eines benutzerdefinierten Passworts.

../../../_images/reset_password_step3_random.jpeg

Passworterzeugung mit dem integrierten Generator.

../../../_images/reset_password_step3_custom.jpeg

Eingabe eines benutzerdefinierten Passworts.

Der Wert MinimumPasswordLength

Mit dem optionalen Wert MinimumPasswordLength definierst du die Mindestlänge eines neuen Passworts. Diese Vorgabe gilt sowohl für automatisch generierte als auch für benutzerdefinierte Passwörter.

Wenn du diesen Wert weglässt, wird standardmäßig eine Mindestlänge von 4 Zeichen verwendet.

<Module name="AdActions">
    (...)
    <Value name="MinimumPasswordLength">10</Value>
    <Value name="MaximumPasswordLength">80</Value>
    (...)
</Module>

Der Wert MaximumPasswordLength

Mit dem optionalen Wert MaximumPasswordLength begrenzt du die maximale Länge eines neuen Passworts – ebenfalls für beide Varianten: zufällig generiert oder manuell eingegeben.

Wird dieser Wert nicht gesetzt, gilt der Standardwert von 64 Zeichen.

<Module name="AdActions">
    (...)
    <Value name="MinimumPasswordLength">10</Value>
    <Value name="MaximumPasswordLength">80</Value>
    (...)
</Module>

Der Wert AllowRandomPassword

Mit dem optionalen Wert AllowRandomPassword steuerst du, ob der integrierte Passwortgenerator im Assistenten angezeigt und verwendet werden darf.

  • Yes → Der Passwortgenerator wird angezeigt und kann verwendet werden.

  • No → Der Generator wird ausgeblendet und steht nicht zur Verfügung.

<Module name="AdActions">
    (...)
    <Value name="AllowRandomPassword">No</Value>
    <Value name="AllowCustomPassword">Yes</Value>
    (...)
</Module>

Der Wert AllowCustomPassword

Mit dem optionalen Wert AllowCustomPassword legst du fest, ob Benutzer beim Zurücksetzen eines Passworts ein eigenes Passwort eingeben dürfen.

  • Yes → Die Option für ein benutzerdefiniertes Passwort wird angezeigt.

  • No → Die Eingabe eines eigenen Passworts ist nicht möglich.

<Module name="AdActions">
    (...)
    <Value name="AllowRandomPassword">Yes</Value>
    <Value name="AllowCustomPassword">No</Value>
    (...)
</Module>

Der Wert CustomPasswordScript

Mit dem optionalen Wert CustomPasswordScript kannst du eine eigene Funktion definieren, um ein Passwort nach deinen Anforderungen zu generieren. Der Wert muss ein gültiges ECMAScript-Skript sein, das das neue Passwort als Rückgabewert liefert.

Wenn ein benutzerdefiniertes Skript verwendet wird, blendet der Assistent die Eingabemöglichkeiten für Länge, Sonderzeichen und Zahlen automatisch aus – wie in der folgenden Abbildung zu sehen:

../../../_images/reset_password_step3_script.jpeg

Benutzerdefinierte Passwortseite mit aktivem CustomPasswordScript.

Das Skript muss kompakt und schnell ausführbar sein – es darf nicht blockieren oder auf externe Ressourcen zugreifen.

Das folgende Beispiel zeigt einen einfachen Passwortgenerator, der ein strukturiertes Passwort mit fünf Zeichenblöcken erzeugt. Wichtig: Die letzte Zeile des Skripts gibt das erzeugte Passwort zurück.

Beispiel für ein benutzerdefiniertes Passwortgenerator-Skript.
var newPassword = "";
var charList = "23456789abcdefghjkmnpqrstwxyzABCDEFGHJKMNPQRSTWXYZ";
var blockCount = 5;
var charsPerBlock = 4;

for (var blockIndex = 0; blockIndex < blockCount; ++blockIndex) {
    if (blockIndex > 0) {
        newPassword += "-";
    }
    for (var charIndex = 0; charIndex < charsPerBlock; ++charIndex) {
        var randomIndex = Math.floor(Math.random() * charList.length);
        newPassword += charList[randomIndex];
    }
}

newPassword;

Beispielkonfiguration

Die folgende Beispielkonfiguration zeigt eine vollständige Einrichtung des Moduls AdActions mit zwei definierten Servern, Passwortregeln und einem benutzerdefinierten Passwortgenerator-Skript.

Beispielkonfiguration für die AdActions-Erweiterung.
<?xml version="1.0" encoding="UTF-8" ?>
<Configuration
    version="1"
    xmlns="http://educateit.ch/software/BlueStone/Configuration/1">

    <Module name="AdActions">
        <List name="Server">
            <ListEntry>
                <Value name="Label">Server A</Value>
                <Value name="ContextMatch">example</Value>
                <Value name="Domain">example.com</Value>
                <Value name="UserSearchRoot"></Value>
                <Value name="Host">example</Value>
                <Value name="Username">administrator</Value>
                <Value name="Password">example</Value>
                <Value name="SSL">Yes</Value>
            </ListEntry>
            <ListEntry>
                <Value name="Label">Server B</Value>
                <Value name="ContextMatch">contextb</Value>
                <Value name="Domain">foo.net</Value>
                <Value name="UserSearchRoot"></Value>
            </ListEntry>
        </List>
        <Value name="MinimumPasswordLength">6</Value>
        <Value name="MaximumPasswordLength">64</Value>
        <Value name="AllowRandomPassword">Yes</Value>
        <Value name="AllowCustomPassword">No</Value>
        <Value name="CustomPasswordScript"><![CDATA[
            var newPassword = "";
            var charList = "23456789abcdefghjkmnpqrstwxyzABCDEFGHJKMNPQRSTWXYZ";
            var blockCount = 5;
            var charsPerBlock = 4;

            for (var blockIndex = 0; blockIndex < blockCount; ++blockIndex) {
                if (blockIndex > 0) {
                    newPassword += "-";
                }
                for (var charIndex = 0; charIndex < charsPerBlock; ++charIndex) {
                    var randomIndex = Math.floor(Math.random() * charList.length);
                    newPassword += charList[randomIndex];
                }
            }

            newPassword;
        ]]></Value>
    </Module>
</Configuration>