Single Sign-On (SSO — технология единого входа) это технология, которая позволяет уже аутентифицированному (вошедшему в систему) пользователю получать доступ к другим сервисам без повторной аутентификации (без повторного ввода пароля) и не используя сохранные пароли для RDP. SSO можно использовать при подключения к терминальным серверам Remote Desktop Services. Это позволит избавить пользователя, выполнившего вход на доменном компьютере, от многократного ввода имени и пароля своей учетной записи в окне RDP клиента при подключении к RDS серверам или запуске опубликованных приложений RemoteApp.
В этой статье мы покажем, как настроить прозрачную авторизацию (Single Sign-On) для пользователей RDS серверов под управлением Windows Server 2022/2019/2016.
Требования к окружению:
- Сервер RD Connection Broker и все RDS хосты должны работать под управлением Windows Server 2012 и выше;
- В качестве клиентских рабочих станций можно использовать Windows 11,10,8.1 с редакциями Pro/Enterprise;
- SSO работает только в доменном окружении: нужно использоваться учетные записи пользователей Active Directory, все RDS сервера и рабочие станции должны быть добавлены в один домен AD;
- На клиентах должна использоваться версия клиента RDP 8.0 и выше;
- SSO работает с парольной аутентификацией (смарт карты не поддерживаются);
- Уровень безопасности RDP (Security Layer) в настройках подключения должен быть установлен в Negotiate или SSL (TLS 1.0), а шифрование High или FIPS Compliant.
Процедура настройки Single Sign-On состоит из следующих этапов:
- Необходимо выпустить и назначить SSL сертификат на серверах RD Gateway, RD Web и RD Connection Broker;
- Включить Web SSO на сервере RDWeb;
- Настроить групповую политику делегирования учетных данных;
- Добавить отпечаток сертификата в доверенные издатели .rdp через GPO.
Включаем SSO аутентфикацию на серверах RDS с Windows Server 2022/2019/2016
В первую очередь вам нужно выпустить и назначить SSL сертификат для вашего развертывания RDS. В EKU (Enhanced Key Usage) сертификата должно обязательно присутствовать идентификатор Server Authentication. Мы опускаем процедуру получения сертификата, т.к. это она выходит за рамки статьи (можно сгенерировать самоподписанный SSL сертификат, но его придется добавлять в доверенные на всех клиентах через GPO).
SSL сертификат привязывается в свойствах RDS Deployment в подразделе Certificates.
Далее на всех серверах c ролью RD Web Access нужно включать “Windows Authentication” и отключить анонимную проверку подлинности (Anonymous Authentication) для каталога IIS RDWeb.
После сохранения изменений, IIS нужно перезапустить:
iisreset /noforce
Если используется шлюз Remote Desktop Gateway, убедитесь, что он не используется для подключения внутренних клиентов (должна стоять галка Bypass RD Gateway server for local address).
Теперь нужно получить отпечаток SSL сертификата (certificate thumbprint) RD Connection Broker и добавить его в список доверенных издателей rdp. Для этого на сервере RDS Connection Broker выполните команду PowerShell:
Get-Childitem CERT:\LocalMachine\My
Скопируйте значение отпечатка сертификата и добавьте его в список отпечатков политики Specify SHA1 thumbprints of certificates representing RDP publishers (Указать отпечатки SHA1 сертификатов, представляющих доверенных издателей RDP) в секции Computer Configuration -> Administrative Templates -> Windows Components -> Windows Desktop Services -> Remote Desktop Connection Client (Административные шаблоны -> Компоненты Windows -> Службы удаленных рабочих столов -> Клиент подключения к удаленному рабочему столу).
Настройка Single Sign-on на клиентах Windows
Следующий этап – настройка политики делегирования учетных данных для компьютеров пользователей.
- Откройте консоль управления доменными политиками Group Policy Management Console (
gpmc.msc
); - Создайте новую доменную GPO и привяжите ее к OU с пользователями (компьютерами), которым нужно разрешить использовать SSO для доступа к RDS сервера;
- Включите политику Allow delegation defaults credential в раздел GPO Computer Configuration -> Administrative Templates -> System -> Credential Delegation (Конфигурация компьютера -> Административные шаблоны -> Передача учетных данных -> Разрешить передачу учетных данных, установленных по-умолчанию). Политика разрешает передавать учетные данные пользователя определенным серверам;
- В список серверов нужно добавить имена RDS хостов, на которые клиенту разрешено автоматически отправлять учетные данные пользователя для выполнения SSO аутентификации. Формат добавления сервера: TERMSRV/rd.contoso.com (обратите внимание, что все символы TERMSRV должны быть в верхнем регистре). Если нужно предоставить такое право всем терминальным системам домена (менее безопасно), можно воспользоваться такой конструкцией:
TERMSRV/*.contoso.com
.
Чтобы избежать появления окна с предупреждением о надежности издателя удаленного приложения, нужно добавить адрес сервера с ролью RD Connection Broker в доверенную зону с помощью параметра GPO «Список назначений зоны безопасности для веб-сайтов» (по аналогии со статьей Как убрать предупреждение системы безопасности при открытии файла в Windows).
- Перейдите в раздел User/Computer Configuration -> Administrative Tools -> Windows Components -> Internet Explorer -> Internet Control Panel -> Security Page-> Site to Zone assignment list (Конфигурация компьютера -> Административные шаблоны -> Компоненты Windows -> Internet Explorer -> Панель управления браузером -> Вкладка безопасность)
- Включите политку Site to Zone assignment list;
- Укажите FQDN имя сервера RD Connection Brtoker и зону 2 (Trusted sites).
Далее нужно включить политику Logon options (Параметры входа) в разделе User/Computer Configuration -> Administrative Tools -> Windows Components -> Internet Explorer -> Internet Control Panel -> Security -> Trusted Sites Zone (Административные шаблоны -> Компоненты Windows -> Internet Explorer -> Панель управления браузером -> Вкладка безопасность -> Зона надежных сайтов) и в выпадающем списке выбрать ‘Automatic logon with current username and password‘ (Автоматический вход в сеть с текущим именем пользователя и паролем).
Затем перейдите в раздел Computer Configuration -> Policies -> Administrative Templates ->Windows Components ->Remote Desktop Services ->Remote Desktop Connection Client и отключите политику Prompt for credentials on the client computer.
После обновления настроек групповых политик на клиенте, запустите клиента mstsc.exe (Remote Desktop Connection), и укажите FQDN имя RDS сервера. В поле UserName будет автоматически подставлено имя пользователя Windows в формате ([email protected]).
Your Windows logon credentials will be used to connect.
Теперь при запуске RemoteApp приложения или прямом подключении к Remote Desktop Services хосту, запрос пароля не будет появляться.
Чтобы использовать шлюз RD Gateway с SSO, нужно для пользователей включить политику Set RD Gateway Authentication Method (User Configuration -> Policies -> Administrative Templates -> Windows Components -> Remote Desktop Services -> RD Gateway) и установить ее значение на Use Locally Logged-On Credentials.
Если у вас используется RD Web Access, то для корректной работы web SSO в Internet Explorer должен быть включён Active-X компонент MsRdpClientShell (MsRdpWebAccess.dll, Microsoft Remote Desktop Services Web Access Control).
В современных версиях Windows браузер Internet Explorer по умолчанию отключен, и вместо него нужно использовать Microsoft Edge. Для использования RD Web с SSO вам нужно открывать этот URL адрес в Microsoft Edge в режиме совместимости (Active-X компоненты без режима совместимости не запускаются в Edge).
Чтобы все клиенты открывали RDWeb в режиме совместимости, нужно установить административные шаблоны GPO для MS Edge и настроить параметры политик в разделе Computer Configuration -> Administrative Templates -> Microsoft Edge:
- Configure Internet Explorer Integrations = Internet Explorer Mode;
- Configure the Enterprise Mode Site List – укажите UNC путь к файлу со списком сайтов SiteList.xml
Возможные ошибки:
- В нашем случае RDP SSO на RDS ферме с User Profile Disks профилями перестала работать после установки обновлений безопасности KB5018410 (Windows 10) и KB5018418 (Windows 11) осенью 2022 г. Для решения проблемы нужно отредактировать *.rdp файл подключения и изменить строку на
use redirection server name:i:1
- Если вы не добавили отпечаток SSL сертификата RDCB в доверенные издатели RDP, при установке соединения появится окно с предупреждением о доверии к издателю данной программы RemoteApp:
Do you trust the publisher of this RemoteApp program?
-
An authentication error has occured (Code: 0x607).
Проверьте, что вы назначили корректный сертификат ролям RDS.
Указываем FQDN имя сервера RDCB и зону 2 (Trusted sites)
при RВCB HA указывать только DNS-имя для балансировки нагрузки (Round Robin) между серверами с ролью Connection Broker или перечислить еще и все RВCB-ы ?
Указывается имя сервера, которое пользователь вводит в браузере, т.е. в вашем случае это fqdn имя RDCB
А если у меня для RDWA выделены отдельные сервера — мне тоже указывать fqdn имя RDCB ?? Просто при заходе на _https://fqdn имя RDCB/rdweb/pages я получаю ошибку что сайт не доступен
Добрый день.
А есть ли возможность использовать SSO если клиенты не в домене?
Нет. Смысл SSO в том, чтобы зайти на компьютер под доменной записью и больше не указывать нигде свой пароль. Достаточно авторизоваться 1 раз.
В вашем случае вы авторизуетесь на ПК под локальной учеткой, а не доменной. Соотвественно, сервер AD в домене ничего о ней не знает и не может авторизовать такую учетку.
Если сможете получить билет Kerberos — то сможете. В Linux получить билет Kerberos — ввести 1 команду.
Добрый день!
Возможно ли использовать SSO, если клиенты принадлежат другому домену с которым настроены доверительные отношения?
Добрый день!
Возможно ли использовать SSO, если клиенты принадлежат другому домену с которым настроено двустороннее доверие?
Да, так при двухстороннем доверии SSO также дожен работать.
Добрый день!
Подскажите, в чем может быть засада.
Настроил все как описано.
Проблема в следующем: если ставлю атентификацию windows, при входе на сайт …/RDWeb/Pages проблем не возникает, учетные данные съедает, но вот при запуске любого опубликованного приложения запрашивает учетные данные.
Переключаю аутентификацию на анонимную+форма, при входе на сайт …/RDWeb/Pages запрашивает данные (так и должно быть), но дальше любое приложение запускается прозрачно.
Всю голову сломал…
RDS сервера с remoteapp добавлены через TERMSRV/*.contoso.com? или только rdweb
Привет, подскажи пожалуйста в случае расвертывания RDS на HTML5 нужны какие либо настройки? Я полагаю они должны отличаться от того что написано в твоей статье. У меня не получается запустить пользователя на портал без пароля. Настроить SSO на HTML5 не выходит. Не сталкивался с такой проблемой? Советы, рекомендации будут полезны. Заранее спасибо.
Пишут, что RDS HTML5 поддерживает SSO. Я сам пока не пробовал развертывать RDS 2019 с HTML5 и SSO в продакшене, но скорее всего все должно работать по этой инструкции.
Не работает. Все равно один раз зайти просит, далее все приложения запускает без запроса логина и пароля. Как я понимаю такой алгоритм работы html5 до 0.9 версии приходилось еще при выборе приложения авторизовываться.
У меня задача, чтобы при подключении к ПК черег РД шлюз юзер вводил лог\пасс один раз. Т.е. сейчас он сначала авторизируется на РД шлюзе, а потом на ПК. Я знаю, что есть галочка в RDP клиенте «использовать мои учетные данные» но нужна защита, что вдруг эту галочку снимут и на шлюзе будет подключение под одной учеткой, а потом на ПК уже под другой.
Подскажите в чем может быть проблема? Настроил все по инструкции но SSO не работает для WEB.
Для простого RDP SSO работает.
Компьютер и сервер в одном домене? Сертификат доверенный?
Пробовали войти через Internet Explorer с ActiveX MsRdpClientShell?
Ну и смотрите внимательно события ауетентфикации в журнале Security
И журналы Event viewer: Applications and Services Logs –> Microsoft –> Windows –> TerminalServices *** и Remote*****
Приветствую! Имеется рабочая RDS на 4х серверах 2012 R2. Появилась необходимость перенести все на 2019 на 2 сервера. Доменная сеть, с центром сертификации. Все установил, настроил и проверил. Все работает как положено. Собрался распространить новый сервер на Windows10 и столкнулся с проблемой. При добавлении RDS через «Подключения к удаленным рабочим столам и приложениям RemoteApp» появляется окно авторизации. Проверил все что можно, но никак не найду где включить SSO для подключения коллекции приложений. Подскажите что можно проверить.
Снимаю свой вопрос. Проблема оказалась в GPO. Для теста я создал виртуальную windows 10 и применил политику с добавлением нового RDS только для этой машины. При обработке политик на локальной машине тестовая политика перекрывалась действующей.
Скажите, пожалуйста, а вы не знаете, какие поправки и дополнения нужно внести, чтобы Прозрачная авторизация, так же, работала и под Microsoft Edge?
Сам не пробовал, но подозреваю что вам нужно в edge настроить IE mode для адресов ваших rds хостов.
Чтобы разрешить SSO через RDS Web Access:
Забэкапьте файл C:\Windows\Web\RDWeb\Pages\web.config
Затем в оригинальном файле:
раскомментируйте секцию с Windows аутентификацией и закомментите Forms аутентификацию.
Затем в самом конце файла найдите и под ним комметим целиком разделы и .
Перезапустите IIS и проверьте WebSSO
Если что-то пошло не так, верните предудущий web.config
Можно опубликовать через GPO connection URL и пользователи будут получить список remoteapp прямо сове в стартовое меню:
User Configuration > Policies >Administrative Templates > Windows Components > Remote Desktop Services > RemoteAppe and Desktop Connections > Specify default connection URL
_https://rds.name/rdweb/feed
Подскажите, имею W11 + RDS 2022 (2CB, несколько коллекций)
на всех рабочих станциях включен credential guard. По разным документам SSO может/не может при этом работать. Кто-то смог настроить рабочий SSO + CredGuard?
При включенном Credential Guard аутентфикация SSO работать не будет.
When Credential Guard is enabled, Credential Security Support Provider («CredSSP») is no longer able to use saved or SSO credentials, though cleartext credentials can still be supplied. CredSSP-based Delegation requires cleartext credentials to be supplied on the destination machine, and doesn’t work with SSO once Credential Guard is enabled and blocks cleartext credential disclosure.
_https://learn.microsoft.com/en-us/windows/security/identity-protection/credential-guard/considerations-known-issues