Erweiterte Anpassung der AD FS-Anmeldeseiten

Active Directory-Verbunddienste (AD FS) in Windows Server 2012 R2 und höher unterstützt die Anpassung der Benutzeranmeldung. In den meisten Szenarien können Sie die integrierten Windows PowerShell-Cmdlets verwenden, um die AD FS-Anmeldeseiten zu konfigurieren. Der empfohlene Ansatz besteht darin, nach Möglichkeit die integrierten Windows PowerShell-Befehle für die Anpassung zu verwenden. Weitere Informationen finden Sie unter AD FS: Anpassung der Benutzeranmeldung.

Manchmal müssen Sie möglicherweise eine Anmeldeerfahrung bereitstellen, die nicht mithilfe der in AD FS enthaltenen PowerShell-Befehle aktiviert werden kann. Sie können die Anmeldeerfahrung konfigurieren, indem Sie der mit AD FS bereitgestellten Datei onload.js benutzerdefinierten Code hinzufügen. Der Dateicode wird auf allen AD FS-Seiten ausgeführt.

Überlegungen

Bevor Sie mit dem Anpassen von AD FS-Anmeldeseiten beginnen, sollten Sie sich die folgenden wichtigen Überlegungen ansehen.

Wichtig

Jede Anpassungsänderung, die sich auf Umleitungsabläufe auswirkt oder Protokollparameter ändert, mit denen AD FS arbeitet, wird nicht unterstützt.

  • Die Datei „onload.js“ wird auf allen AD FS-Seiten ausgeführt, einschließlich formularbasierter Anmeldeseiten, Seiten für die Startbereichsermittlung usw. Stellen Sie immer sicher, dass Ihr benutzerdefinierter Code nur wie vorgesehen und nicht unerwartet ausgeführt wird.

  • AD FS wird mit einem integrierten Webdesign namens Standard bereitgestellt. Sie können den Inhalt von „onload.js“, der das Standardwebdesign erstellt, nicht ändern. Zum Aktualisieren der Datei „onload.js“ müssen Sie ein benutzerdefiniertes Webdesign für die AD FS-Anmeldeseiten erstellen und anwenden. Weitere Informationen finden Sie unter AD FS: Anpassung der Benutzeranmeldung.

  • Die ursprüngliche Datei „onload.js“ für das Standardwebdesign enthält auch Code zum Verarbeiten des Seitenrenderings für verschiedene Formfaktoren. Der empfohlene Anpassungsansatz besteht darin, Ihren benutzerdefinierten Logikcode an die vorhandene Datei „onload.js“ anzufügen. Ändern Sie nicht den ursprünglichen Inhalt der Datei „onload.js“.

  • Überprüfen Sie beim Verweis auf HTML-Elemente immer zuerst, ob das Element vorhanden ist, bevor Sie eine Aktion dafür ausführen. Dieser Schritt gewährleistet Stabilität und stellt sicher, dass die benutzerdefinierte Logik nicht auf Seiten ausgeführt wird, die dieses Element nicht enthalten. Um vorhandene HTML-Elemente zu identifizieren, sehen Sie sich die HTML-Quelle auf den AD FS-Anmeldeseiten an.

  • Es wird empfohlen, Ihre Anpassungen in einer alternativen Umgebung zu überprüfen und Tests auszuführen, bevor Sie Ihre Anpassungen auf AD FS-Produktionsserver übertragen. Dadurch verringert sich die Wahrscheinlichkeit, dass Endbenutzer*innen die Anpassungen vor deren Validierung zugänglich gemacht werden.

Anpassungsschritte

Die folgenden Abschnitte enthalten die Schritte zum Anpassen des Inhalts der Datei „onload.js“ für AD FS-Anmeldeseiten.

Erstellen eines benutzerdefinierten Webdesigns

Wenn Sie Ihre benutzerdefinierte Logik zur Datei „onload.js“ hinzufügen möchten, müssen Sie zunächst ein benutzerdefiniertes Webdesign erstellen. Eine schnelle Methode besteht darin, das Standardwebdesign zu exportieren und dann den ursprünglichen Code als Grundlage für Ihre Anpassungen zu verwenden.

Führen Sie das folgende Cmdlet aus, um ein benutzerdefiniertes Webdesign zu erstellen, indem Sie das Standardwebdesign duplizieren:

New-AdfsWebTheme –Name custom –SourceName default

Generieren der Datei „onload.js“

Der nächste Schritt besteht darin, Ihr benutzerdefiniertes Webdesign zu exportieren, damit Sie über eine Datei vom Typ „onload.js“ verfügen, die Sie aktualisieren können.

Führen Sie das folgende Cmdlet aus, um Ihr benutzerdefiniertes Webdesign zu exportieren und eine Datei vom Typ „onload.js“ zu generieren:

Export-AdfsWebTheme –Name default –DirectoryPath c:\theme

Die Datei „onload.js“ wird im Ordner Skript des im Cmdlet angegebenen Verzeichnisses platziert. Im Beispiel ist c:\theme der angegebene Ordner.

Hinzufügen von Anpassungen

Jetzt können Sie den Inhalt der Datei „onload.js“ ändern und benutzerdefinierten Logikcode für Ihre Szenarien hinzufügen. Wie bereits erwähnt, sollten Sie sicherstellen, dass Sie Ihren benutzerdefinierten Code am Ende der Datei „onload.js“ hinzufügen.

Im folgenden Abschnitt Beispiele finden Sie Codeausschnitte, die allgemeine Anpassungen veranschaulichen.

Ändern der Zieldatei „onload.js“

Nachdem Sie Ihre Anpassungen hinzugefügt haben, müssen Sie das AD FS-Webdesign so aktualisieren, dass Ihre Datei „onload.js“ anstelle der ursprünglichen Datei „onload.js“ verwendet wird.

Führen Sie das folgende Cmdlet aus, um Ihre Datei „onload.js“ als Ziel für Webdesigndefinitionen festzulegen:

  • Für AD FS in Windows Server 2016 und höher:

    Set-AdfsWebTheme -TargetName custom -OnLoadScriptPath "c:\theme\script\onload.js"
    
  • Für AD FS in Windows Server 2012 R2:

    Set-AdfsWebTheme -TargetName custom -AdditionalFileResource @{Uri='/adfs/portal/script/onload.js';path="c:\theme\script\onload.js"}
    

Anwenden von Anpassungen auf AD FS

Der letzte Schritt besteht darin, Ihre Anpassungen auf die AD FS-Anmeldeseiten anzuwenden.

Führen Sie das folgende Cmdlet aus, um AD FS mit Ihren Anpassungen zu aktualisieren:

Set-AdfsWebConfig -ActiveThemeName custom

Beispiele

Die folgenden Beispiele enthalten benutzerdefinierten Code, den Sie der Datei „onload.js“ hinzufügen können, um AD FS-Anmeldeseiten zu konfigurieren.

Hinweis

Fügen Sie benutzerdefinierten Code immer am Ende der Datei „onload.js“ ein.

Ändern der Titelzeichenfolge der Anmeldeseite

Auf der formularbasierten AD FS-Anmeldeseite wird über den Benutzereingabefeldern ein Titel angezeigt. Der Standardwert für den Titel ist „Mit Organisationskonto anmelden“.

Ersetzen Sie den Standardzeichenfolgenwert durch eine benutzerdefinierte Zeichenfolge, indem Sie der Datei „onload.js“ den folgenden Code hinzufügen. Legen Sie im Code den Wert des Parameters loginMessage.innerHTML auf die benutzerdefinierte Zeichenfolge fest, die für den Titel verwendet werden soll.

// Sample code to change page title string

// Check if loginMessage element is present
var loginMessage = document.getElementById('loginMessage');
if (loginMessage)
{
       // If loginMessage element is present, change title to custom value
       loginMessage.innerHTML = 'Custom title string value';
}

Ermöglichen der Anmeldung mit einem SAM-Kontonamen

Die formularbasierte AD FS-Anmeldeseite unterstützt standardmäßig zwei Anmeldemethoden:

  • userPrincipalName": A user principal name (UPN), such as user@contoso.com
  • samAccountName: Ein SAM-Kontoname (Security Account Manager, Sicherheitskontenverwaltung) mit Domänenqualifizierung, z. B. contoso\user oder contoso.com\user

Stellen Sie sich ein Szenario vor, in dem sich alle Benutzer*innen in derselben Domäne befinden und sie nur ihren SAM-Kontonamen kennen. Sie können die Anmeldeseite aktualisieren, damit sich die Benutzer*innen nur mit ihrem SAM-Kontonamen anmelden können.

Aktivieren Sie die ausschließliche Anmeldung über SAM-Konten, indem Sie der Datei „onload.js“ den folgenden Code hinzufügen. Legen Sie im Code den Wert des Parameters userNameValue auf die gewünschte Domäne fest.

// Sample code to enable user login from SAM account name only

if (typeof Login != 'undefined'){

    Login.submitLoginRequest = function () {
    
    var u = new InputUtil();
    var e = new LoginErrors();
    var userName = document.getElementById(Login.userNameInput);
    var password = document.getElementById(Login.passwordInput);

    // Update login method with desired domain value
    if (userName.value && !userName.value.match('[@\\\\]'))
    {
        var userNameValue = 'contoso.com\\' + userName.value;
        document.forms['loginForm'].UserName.value = userNameValue;
    }
    
    // Check for user name errors
    if (!userName.value) {
       u.setError(userName, e.userNameFormatError);
       return false;
    }

    // Check for password errors
    if (!password.value)
    {
        u.setError(password, e.passwordEmpty);
        return false;
    }

    // Update the form page 
    document.forms['loginForm'].submit();
    return false;
    };

}