Расширенная настройка страниц входа AD FS
службы федерации Active Directory (AD FS) (AD FS) в Windows Server 2012 R2 и более поздних версий поддерживает настройку интерфейса входа пользователя. Для большинства сценариев можно использовать встроенные командлеты Windows PowerShell для настройки страниц входа AD FS. Рекомендуемый подход — использовать встроенные команды Windows PowerShell для настройки по возможности. Дополнительные сведения см. в разделе о настройке входа пользователей AD-FS.
Иногда может потребоваться предоставить интерфейс входа, который не может быть включен с помощью команд PowerShell, которые входят в AD FS. Вы можете настроить интерфейс входа, добавив пользовательский код в файл onload.js , предоставленный AD FS. Код файла выполняется на всех страницах AD FS.
Рекомендации
Прежде чем приступить к настройке страниц входа AD FS, ознакомьтесь со следующими важными рекомендациями.
Внимание
Любые изменения настройки, влияющие на потоки перенаправления или модифицируют параметры протокола, используемые AD FS, не поддерживаются.
Файл onload.js выполняется на всех страницах AD FS, включая страницы входа на основе форм, страницы обнаружения домашней области и т. д. Всегда убедитесь, что пользовательский код выполняется только как предполагаемое и непредвиденное.
AD FS поставляется со встроенной веб-темой, называемой по умолчанию. Невозможно изменить содержимое onload.js, создающее веб-тему по умолчанию. Чтобы обновить файл onload.js, создайте и используйте настраиваемую веб-тему для страниц входа AD FS. Дополнительные сведения см. в разделе о настройке входа пользователей AD-FS.
Исходный файл onload.js для веб-темы по умолчанию также содержит код для обработки отрисовки страниц для различных форм-факторов. Рекомендуемый подход к настройке заключается в добавлении пользовательского кода логики в существующий файл onload.js. Не изменяйте исходное содержимое файла onload.js.
При ссылке на HTML-элементы всегда проверка для существования элемента перед действием элемента. Этот шаг обеспечивает надежность и гарантирует, что пользовательская логика не выполняется на страницах, не содержащих этот элемент. Чтобы определить существующие элементы HTML, просмотрите html-источник на страницах входа AD FS.
Рекомендуется проверить настройки в альтернативной среде и выполнить тесты перед перемещением настроек на рабочие серверы AD FS. Этот шаг снижает вероятность предоставления конечным пользователям настроек перед проверкой.
Действия по настройке
В следующих разделах приведены действия по настройке содержимого файла onload.js для страниц входа AD FS.
Создание пользовательской веб-темы
Чтобы добавить пользовательскую логику в файл onload.js, первым шагом является создание пользовательской веб-темы. Быстрый способ — экспортировать веб-тему по умолчанию, а затем использовать исходный код в качестве основы для настроек.
Выполните следующий командлет, чтобы создать пользовательскую веб-тему, дублируя веб-тему по умолчанию:
New-AdfsWebTheme –Name custom –SourceName default
Создание файла onload.js
Следующий шаг — экспортировать настраиваемую веб-тему, чтобы у вас был onload.js файл, который можно обновить.
Выполните следующий командлет, чтобы экспортировать настраиваемую веб-тему и создать файл onload.js:
Export-AdfsWebTheme –Name default –DirectoryPath c:\theme
Файл onload.js помещается в папку скрипта в каталоге, указанном в командлете. В примере указанная папка c:\theme
.
Добавление настройки
Теперь вы готовы изменить содержимое onload.js и добавить пользовательский код логики для сценариев. Как упоминание, обязательно добавьте пользовательский код в конец файла onload.js.
См. следующий раздел "Примеры" для фрагментов кода, демонстрирующих распространенные настройки.
Изменение целевого файла onload.js
После добавления настроек необходимо обновить веб-тему AD FS, чтобы использовать файл onload.js, а не исходный файл onload.js.
Выполните следующий командлет, чтобы задать файл onload.js в качестве целевого объекта для определений веб-темы:
Для AD FS в Windows Server 2016 и более поздних версиях:
Set-AdfsWebTheme -TargetName custom -OnLoadScriptPath "c:\theme\script\onload.js"
Для AD FS в Windows Server 2012 R2:
Set-AdfsWebTheme -TargetName custom -AdditionalFileResource @{Uri='/adfs/portal/script/onload.js';path="c:\theme\script\onload.js"}
Применение настроек к AD FS
Последним шагом является применение настроек к страницам входа AD FS.
Выполните следующий командлет, чтобы обновить AD FS с помощью настроек:
Set-AdfsWebConfig -ActiveThemeName custom
Примеры
В следующих примерах приведен пользовательский код, который можно добавить в файл onload.js для настройки страниц входа AD FS.
Примечание.
Всегда добавляйте пользовательский код в конец файла onload.js.
Изменение строки заголовка страницы входа
На странице входа на основе форм AD FS отображается заголовок над полями ввода пользователя. Значение заголовка по умолчанию — "Вход с помощью учетной записи организации".
Замените строковое значение по умолчанию настраиваемой строкой, добавив следующий код в файл onload.js. В коде задайте для loginMessage.innerHTML
параметра настраиваемую строку, которая будет использоваться для заголовка.
// 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';
}
Принять вход с именем учетной записи SAM
Страница входа на основе форм AD FS поддерживает два метода входа по умолчанию:
userPrincipalName": A user principal name (UPN), such as
user@contoso.com'.samAccountName
: доменное имя учетной записи диспетчера учетных записей безопасности (SAM), напримерcontoso\user
илиcontoso.com\user
.
Рассмотрим сценарий, в котором все пользователи находятся в одном домене, и пользователи знают только имя учетной записи SAM. Вы можете обновить страницу входа, чтобы пользователи могли войти только с помощью имени учетной записи SAM.
Включите вход из учетных записей SAM, добавив следующий код в файл onload.js. В коде задайте для userNameValue
параметра нужный домен.
// 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;
};
}