Олицетворение и делегирование в приложении MVC 3 на IIS 7.5 - PullRequest
2 голосов
/ 11 января 2012

С учетом следующего сценария:

  • Веб-сервер Windows 2008 R2 x64 с IIS 7.5, Сервер 1
  • Файловый сервер Windows 2003 R2 x64, Сервер 2
  • Приложение MVC 3 с аутентификацией и олицетворением Windows (аутентифицированный пользователь)
  • Настроен Сервер 1 как 'Trusted computer for delegation' в Активном каталоге
  • Internet Explorer 8

В приложении у пользователя есть возможность загрузить файл.Этот загруженный файл должен быть сохранен на сервере 2 .В коде мы создаем UNC-путь к этому Серверу 2 и сохраняем его там.

public ActionResult Upload(HttpPostedFileBase file)
{
  var savedDirectory = "\\Path\To\Server2";

  if (Directory.Exists(savedDirectory))
  {
    file.SaveAs(savedFileName);
  }
  else
  {
    Directory.CreateDirectory(savedDirectory);
    file.SaveAs(savedFileName);
  }

  return RedirectToAction("Action", "Controller", new { id = 1 });
}

Мы установили приложение на Сервер 1 и протестировали его локально на Сервер 1 , все прошло нормально.Файлы загружаются на Сервер 2 .

Когда мы тестируем тот же сценарий с клиентского рабочего стола, мы получаем сообщение о том, что недостаточно разрешений для сохранения файла на Сервер 2 .

Сеанс Wiresharkпоказывает, что Сервер 1 не выдал себя за другого, поскольку аутентифицированный пользователь на Сервер 2 был пустым / анонимным.

Олицетворение как определенного пользователя вместо аутентифицированного пользователя

Нам не удалось выполнить олицетворение, поэтому мы создали служебную учетную запись и настроили приложение для олицетворения с этим Specific User вместо Authenticated User.Учетная запись службы является учетной записью домена и имеет разрешения для папки на Сервер 2 .

Когда мы пытаемся загрузить, учетная запись службы не имеет разрешений на локальную папку, из которой мы загружаем файл.

Делегирование

Через Олицетворение в asp.net mvc мы узнали, что нам нужно доверять Сервер 1 для делегирования.

После того, как мы доверили Сервер 1 для делегирования: все еще нет разрешений для сохранения файла на Сервер 2 .Мы попробовали это как с олицетворением как Authenticated User ru Specific user

  1. Олицетворение как Authenticated User с делегированием, не работающим: недостаточно разрешений на Сервер 2
  2. Олицетворение как Specific User не работает: недостаточно разрешений для Локальной папки

Мы что-то здесь упускаем?Нужны ли дополнительные шаги для делегирования?

Ответы [ 2 ]

1 голос
/ 09 февраля 2012

Мы исправили эту проблему следующим образом:

  1. Настройка делегирования в домене для сервера 1
  2. И добавление Kerberos provider к приложению в IIS (щелчок правой кнопкой мыши по аутентификации Windows)
0 голосов
/ 20 июня 2012

Я столкнулся с этой ошибкой сегодня, и вот шаги, которые я сделал, чтобы исправить проблему:

  1. Убедитесь, что ASP.NET Impersonation включен для вашего сайта.Перейдите на свой сайт в диспетчере IIS и в разделе «Функции» дважды щелкните «Аутентификация», затем включите «Олицетворение ASP.NET»
  2. Использование встроенного режима для пула приложений
  3. Измените файл web.config своего приложения наукажите настройки ниже:

    <system.webServer>
      <validation validateIntegratedModeConfiguration="false" />
      <modules runAllManagedModulesForAllRequests="true" /> 
    </system.webServer>
    
...