Вопрос или проблема
У меня есть учетная запись MSA, которую я использую в пуле приложений для веб-сайта.
На моем сайте есть пакет под названием Puppeteer, который необходимо запустить в браузере на сервере. (Редактировать: я использую браузер, который уже установлен на сервере в C:\Program Files
, а не тот, который Puppeteer хочет установить)
На этом конкретном веб-сайте я использую аутентификацию Windows, чтобы получить доменного пользователя компании, который в данный момент использует свой ПК.
Проблема в том, что, как я полагаю, происходит, что их пользователь пытается запустить браузер, но у них нет разрешений, только у пользователя пула приложений есть разрешения (учетная запись MSA).
Потому что, когда я переключаюсь на анонимную аутентификацию, которая затем использует учетную запись MSA, это работает.
Существует ли способ заставить учетную запись MSA запустить браузер, даже когда используется аутентификация Windows? Или, по крайней мере, как-то сделать так, чтобы пользователь Windows мог безопасно запустить браузер? Возможно, создать ярлык в безопасном месте и дать ему правильные разрешения – сработает ли это? Будет ли это безопасно?
Есть два сайта – фронтенд, который принимает аутентификацию Windows и который общается через внутренний API (использует какую-то другую форму аутентификации, например, статический API-ключ) с бэкендом, который использует Puppeteer.
Насколько я понимаю, проблема в том, что прием аутентификации Windows в IIS по умолчанию также выполняет имперсонацию от лица этого пользователя – заставляя приложение работать с привилегиями этого пользователя – и переключение привилегий через имперсонацию (в отличие от полной ‘авторизации’) вероятно несовместимо с различными функциями усиления безопасности и изоляции, которые современные браузеры (особенно Chrome?) хотят использовать.
Поэтому первое, что я попробую, если это возможно, – отключить имперсонацию – например, возможно:
Ответ или решение
Как настроить запуск браузера с использованием MSA и Windows Authentication в IIS
Введение
Использование аккаунтов управляемой службы (Managed Service Accounts, MSA) в IIS может значительно упростить управление аутентификацией и безопасностью для веб-приложений. Однако, когда вашему приложению необходимо использовать Puppeteer для запуска браузера (например, Edge или Chrome) внутри сервера, могут возникнуть проблемы, связанные с правами доступа и механикой аутентификации, особенно в сочетании с Windows Authentication. В этом материале мы подробно разберем, как разрешить эту ситуацию.
Проблема
Как вы описали, ваше веб-приложение использует Windows Authentication для идентификации пользователей домена и запускается от имени MSA. При этом Puppeteer, установленный на сервере, не может корректно запустить браузер, поскольку он пытается выполнить операции от пользователя, не имеющего соответствующих прав. В то же время, использование анонимной аутентификации с MSA позволяет браузеру запускаться без проблем.
Решение
-
Отключение импостерации: Важным шагом в решении проблемы будет отключение импостерации для вашего приложения. Это позволит приложению работать от имени MSA, а не от имени пользователя, вошедшего в систему. Для этого вам нужно изменить настройки в файле web.config:
<system.web> <authentication mode="Windows" /> <identity impersonate="false" /> </system.web>
Это действие должно устранить проблему запуска браузера, поскольку браузер будет запущен от имени учетной записи MSA, а не пользователя, который использует веб-приложение.
-
Настройка разрешений для MSA: Убедитесь, что MSA имеет все необходимые разрешения на запуск браузеров. В зависимости от вашей политической безопасности и конфиденциальности убедитесь, что учётная запись MSA имеет доступ к исполняемым файлам браузера (например,
C:\Program Files\Google\Chrome\Application
для Chrome).Для настройки разрешений можно использовать следующее:
- Найдите исполняемый файл браузера.
- Щелкните правой кнопкой мыши и выберите «Свойства».
- Перейдите на вкладку «Безопасность» и добавьте вашего MSA в список пользователей с необходимыми правами.
-
Использование установленных браузеров: Как вы указали, вы используете браузер, уже установленный на сервере. Убедитесь, что Puppeteer настроен на использование этого браузера, а не пытается установить свою версию.
Это можно сделать следующим образом:
const puppeteer = require('puppeteer'); const browser = await puppeteer.launch({ executablePath: 'C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe', headless: false // Убедитесь, что вы запускаете в режиме с пользовательским интерфейсом });
Дополнительные рекомендации
-
Запуск Puppeteer в фоне: Если возможно, рекомендуется запускать Puppeteer в отдельном процессе или сервисе с необходимыми правами доступа. Это может обойти ограничения на запуск, связанные с Windows Authentication и импостерацией.
-
Разделение приложений: Рассмотрите возможность отделения передачи сигналов от пользователя и запуска Puppeteer в отдельной среде, избегая зависимостей между аутентификацией пользователя и подписчиками.
-
Тестирование безопасности: После выполнения изменений важно провести оценку безопасности, чтобы гарантировать, что ваша конфигурация не нарушает политики безопасности вашей организации.
Заключение
Запуск браузера с использованием MSA в контексте Windows Authentication в IIS требует внимательного подхода к управлению правами доступа и конфигурацией импостерации. Отключив импостерацию и откорректировав разрешения для MSA, вы сможете безопасно запускать Puppeteer с доступом к необходимым браузерам. Важно также провести соответствующий аудит безопасности после изменений, чтобы обеспечить защиту данных и системы.