Personnalisation avancée des pages de connexion AD FS

Dans Windows Server 2012 R2 et ultérieur, les services de fédération Active Directory (AD FS) prennent en charge la personnalisation de l’expérience de connexion l’utilisateur. Dans la plupart des scénarios, vous pouvez utiliser les applets de commande Windows PowerShell intégrées pour configurer les pages de connexion AD FS. Il est recommandé d’utiliser les commandes intégrées Windows PowerShell pour la personnalisation dans la mesure du possible. Pour plus d’informations, consultez Personnalisation de la connexion utilisateur AD FS.

Parfois, vous devrez peut-être fournir une expérience de connexion qui ne peut pas être activée à l’aide des commandes PowerShell fournies avec AD FS. Vous pouvez configurer l’expérience de connexion en ajoutant du code personnalisé au fichier onload.js fourni avec AD FS. Le code du fichier est exécuté sur toutes les pages AD FS.

Considérations

Avant de commencer à personnaliser les pages de connexion AD FS, passez en revue les considérations importantes suivantes.

Important

Toute personnalisation ayant un impact sur les flux de redirection ou modifiant les paramètres de protocole utilisés par AD FS n’est pas prise en charge.

  • Le fichier onload.js est exécuté sur toutes les pages AD FS, notamment les pages de connexion basées sur un formulaire, les pages de découverte du domaine d’accueil, etc. Veillez à toujours vérifier que votre code personnalisé s’exécute comme prévu et pas de manière inattendue.

  • AD FS est fourni avec un thème web intégré appelé default. Vous ne pouvez pas modifier le contenu onload.js qui crée le thème web default. Pour mettre à jour le fichier onload.js, créez et utilisez un thème web personnalisé pour les pages de connexion AD FS. Pour plus d’informations, consultez Personnalisation de la connexion utilisateur AD FS.

  • Le fichier onload.js d’origine pour le thème web default contient également du code afin de gérer le rendu des pages pour différents facteurs de forme. L’approche de personnalisation recommandée consiste à ajouter votre code de logique personnalisée au fichier onload.js existant. Ne modifiez pas le contenu du fichier onload.js d’origine.

  • Quand vous référencez des éléments HTML, vérifiez toujours l’existence de l’élément avant d’agir sur celui-ci. Cette étape offre une certaine robustesse et garantit qu’une logique personnalisée n’est pas exécutée sur des pages qui ne contiennent pas cet élément. Pour identifier les éléments HTML existants, examinez la source HTML sur les pages de connexion AD FS.

  • Il est recommandé de valider vos personnalisations dans un autre environnement et d’exécuter des tests avant de déplacer vos personnalisations sur des serveurs AD FS de production. Cette étape réduit les risques d’exposition des utilisateurs finaux à ces personnalisations avant leur validation.

Étapes de personnalisation

Les sections suivantes fournissent les étapes permettant de personnaliser le contenu du fichier onload.js pour les pages de connexion AD FS.

Créer un thème web personnalisé

Pour ajouter votre logique personnalisée au fichier onload.js, la première étape consiste à créer un thème web personnalisé. Pour une méthode rapide, exportez le thème web default, puis utilisez le code d’origine comme base pour vos personnalisations.

Exécutez l’applet de commande suivante pour créer un thème web personnalisé en dupliquant le thème web default :

New-AdfsWebTheme –Name custom –SourceName default

Générer le fichier onload.js

L’étape suivante consiste à exporter votre thème web personnalisé afin de disposer d’un fichier onload.js que vous pouvez mettre à jour.

Exécutez l’applet de commande suivante pour exporter votre thème web personnalisé et générer un fichier onload.js :

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

Le fichier onload.js est placé dans le dossier script du répertoire spécifié dans l’applet de commande. Dans l’exemple, le dossier spécifié est c:\theme.

Ajouter des personnalisations

Vous êtes maintenant prêt à modifier le contenu du fichier onload.js et à ajouter du code de logique personnalisée pour vos scénarios. Comme mentionné précédemment, veillez à ajouter votre code personnalisé à la fin du fichier onload.js.

Consultez la section Exemples suivante pour obtenir des extraits de code qui illustrent des personnalisations courantes.

Modifier le fichier onload.js cible

Après avoir ajouté vos personnalisations, vous devez mettre à jour le thème web AD FS pour utiliser votre fichier onload.js à la place du fichier onload.js d’origine.

Exécutez l’applet de commande suivante pour définir votre fichier onload.js comme cible pour les définitions de thèmes web :

  • Pour AD FS sur Windows Server 2016 et ultérieur :

    Set-AdfsWebTheme -TargetName custom -OnLoadScriptPath "c:\theme\script\onload.js"
    
  • Pour AD FS sur Windows Server 2012 R2 :

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

Appliquer des personnalisations à AD FS

La dernière étape consiste à appliquer vos personnalisations aux pages de connexion AD FS.

Exécutez l’applet de commande suivante pour mettre à jour AD FS avec vos personnalisations :

Set-AdfsWebConfig -ActiveThemeName custom

Examples

Les exemples suivants fournissent du code personnalisé que vous pouvez ajouter au fichier onload.js pour configurer les pages de connexion AD FS.

Note

Ajoutez toujours le code personnalisé à la fin du fichier onload.js.

Modifier la chaîne de titre de la page de connexion

La page de connexion basée sur un formulaire AD FS affiche un titre au-dessus des champs d’entrée utilisateur. La valeur de titre par défaut est « Connexion avec votre compte professionnel ».

Remplacez la valeur de chaîne par défaut par une chaîne personnalisée en ajoutant le code suivant au fichier onload.js. Dans le code, définissez la valeur du paramètre loginMessage.innerHTML sur la chaîne personnalisée à utiliser pour le titre.

// 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';
}

Accepter la connexion avec un nom de compte SAM

La page de connexion basée sur un formulaire AD FS prend en charge deux méthodes de connexion par défaut :

  • userPrincipalName": A user principal name (UPN), such as user@contoso.com`.
  • samAccountName : nom de compte du Gestionnaire de comptes de sécurité (SAM) de domaine, par exemple contoso\user ou contoso.com\user.

Imaginons un scénario dans lequel tous les utilisateurs se trouvent dans le même domaine et ne connaissent que leur nom de compte SAM. Vous pouvez mettre à jour la page de connexion pour permettre aux utilisateurs de se connecter à l’aide de leur nom de compte SAM uniquement.

Activez la connexion à partir de comptes SAM uniquement en ajoutant le code suivant au fichier onload.js. Dans le code, définissez la valeur du paramètre userNameValue sur le domaine souhaité.

// 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;
    };

}