NTLM в качестве единого входа и выполнение определенных действий в качестве олицетворенного администратора - PullRequest
0 голосов
/ 30 октября 2009

Не могу наткнуться на правильную комбинацию настроек IIS / ASP.NET, чтобы выполнить следующее:

  1. Все пользователи на внутреннем домене должны иметь доступ к сайту IIS (с аутентификацией NTLM), а приложение ASP.NET должно иметь возможность получить имя текущего пользователя (также известное как * 1006). * пользователь аутентифицирован как себя ).
  2. Запущенное приложение ASP.NET должно иметь возможность выполнять определенные действия под учетной записью администратора . Например, изменение Active Directory или запись файлов в ограниченные местоположения.

Возможно, вы уже догадались, но смысл приложения в том, чтобы позволить "обычным" пользователям вносить определенные "административные" изменения через веб-приложение. В то же время, изменение должно быть зарегистрировано с учетной записью «обычного» пользователя, поэтому я не хочу терять учетные данные аутентифицированного пользователя.

Поиск конкретных настроек в IIS6 для выполнения # 1 (любые пользователи в домене, чтобы попасть на сайт и пройти аутентификацию как сами), а также код для # 2.

Ответы [ 2 ]

1 голос
/ 31 октября 2009

Есть как минимум два варианта:

Общее для обоих:

  • В настройках IIS должна быть установлена ​​аутентификация Windows.
  • Личность пользователя может быть прочитана из httpcontext.

Вариант 1:

  • Установить олицетворение = ложь
  • Установить идентификатор пула приложений для пользователя, который имеет право вносить изменения в AD
  • Добавить вышеуказанного пользователя в группу IIS_WPG

Вариант 2:

  • При внесении изменений в AD установите идентификатор потока для идентификатора пользователя, которому разрешено вносить изменения в AD

Для варианта 2 приведен пример кода, в котором используется олицетворенный пользователь:

http://msdn.microsoft.com/en-us/library/system.security.principal.windowsimpersonationcontext.aspx

0 голосов
/ 31 октября 2009

С точки зрения безопасности, наилучшим подходом было бы разделить все административные операции на свой собственный веб-сервис, который выполняет аутентификацию, но не подражает. Ваша обычная часть сайта будет выполнять административные операции, вызывая веб-службу, как и любой другой клиент, даже если это вызов localhost.

Таким образом вы достигаете изоляции между обычным пулом приложений (который олицетворяет) и привилегированным пулом приложений (административным).

Наконец, это, возможно, расщепление волосков, но это должна быть аутентификация Kerberos, а не NTLM, потому что NTLM не допускает ограниченное делегирование , и ваше «нормальное» приложение необходимо будет включить для делегирования, если оно доступ к чему-либо вне локального хоста IIS.

...