Аутентификация пользователя с аутентификацией в классическом ASP под IIS7

Недавно я переместил один из наших серверов с Server 2003 и IIS6 на Server 2008 R2 и IIS7 (технически IIS7.5, я полагаю). При этом я перевожу небольшой инструмент управления учетными записями, написанный на классическом ASP, и столкнулся с проблемой олицетворения пользователя. Обширный поиск пока не сильно помог.

В IIS6 сайт был настроен для олицетворения вошедшего в систему пользователя. Таким образом, если администратор домена вошел в систему, он мог запускать команды для создания пользовательских каталогов, настройки разрешений и т. Д. Используя Procmon, вы можете видеть процессы, выполняющиеся от имени этого пользователя. Это работало нормально.

Однако с тем же кодом под IIS7 я не могу получить это поведение. Я включил базовую аутентификацию, отключил анонимную аутентификацию, включил олицетворение и изменил пул приложений на классический вместо встроенной конвейерной обработки. Кажется, все настроено правильно, однако все процессы, запускаемые классическим сайтом ASP, продолжают работать как удостоверение AppPool по умолчанию, а не как вошедший в систему пользователь.

Если это имеет значение, программы запускаются с кодом, таким как:

set Wsh = Server.CreateObject("WScript.Shell")
Wsh.Run("cmd.exe /C mkdir D:\users\foo")

Мониторинг через Procmon показывает, что cmd.exe запускается как "Классический.NET AppPool" или "DefaultAppPool" в зависимости от режима конвейера.

Любые предложения о том, как заставить классический ASP-сайт выдавать себя за пользователя и выполнять его как аутентифицированного пользователя, было бы замечательно. Спасибо!

3 ответа

Существует малоизвестная настройка, называемая LogonMethod, которая изменяет возможности учетной записи пользователя, которая входит в систему с анонимным или обычным входом в систему.

Я (кажется, я) помню это изменение для IIS 5 или 6, так что, возможно, оно снова изменилось на 7. Эффект был бы именно тем, что вы описываете - неспособность сделать то, что интерактивный пользователь без проблем бы сделал.

Плохо было бы менять его оптом, чтобы добиться делегирования - в конце концов, именно для этого предназначены ограниченное делегирование Kerberos и переход по протоколу, - но это может помочь решить эту проблему.

LogonMethod - свойство IIS 6 и более ранних версий - http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/fa99f59f-d11f-41f7-b220-ad9d433f80b0.mspx?mfr=true

LogonType - похожее свойство для пула приложений, которое принимает меньше параметров (но служба может работать для вас) - http://www.iis.net/ConfigReference/system.applicationHost/applicationPools/add/processModel

О, и возможно (хотя, как вы говорите, кровавый?) Маловероятно, что ваш объект WScript работает в контейнере COM с идентификатором, отличным от рабочего процесса.

Старый пост, но, возможно, кто-то может найти его полезным. Я боролся с этой проблемой и нашел способ.

Если вам нужно запускать страницы.asp с особым пользователем (у меня были проблемы с форматом даты и валюты), попробуйте указать указанного пользователя в качестве идентификатора в пуле приложений, затем установите для параметра "Загрузить профиль пользователя" значение True. Это решило мои проблемы.

Почему вы не включили также "Интегрированную проверку подлинности Windows" в IIS?
Это было зарегистрировано локально?
под локальным администратором?

Удостоверься что:

  • NTLM2 включен
  • вы изменили web.config по умолчанию

     <authentication mode="None" />   
    

    в

     <authentication mode="Windows" />  
    
Другие вопросы по тегам