ASP.NET Authentication Issues on IIS7 - User.Identity.Name is empty for Windows authentication

У нас есть приложение ASP.NET на ASP.NET 4.0 с использованием MVC 3, которое использует аутентификацию Windows.

При запуске из Visual Studio 2010 все работает как ожидалось, но при развертывании на IIS7 залогиненный в Windows пользователь так и не заполняется (проверка User.Identity.Name). Диалоговое окно с запросом учетных данных пользователя также не появляется.

Параметры web.config:

<authentication mode="Windows" />

В IIS я вижу, что аутентификация Windows включена, также как и Anonymous (отключение Anonymous приводит к 403 Forbidden и не отображается содержимое).

Я пробовал включать и выключать "Kernel-mode authentication" (useKernelMode="true"), но, похоже, это ничего не меняет. Хотя я помню, что нам пришлось отключить этот параметр на другом сайте на другом сервере, чтобы аутентификация работала должным образом (возможно, это указывает на потенциальную проблему дальше по стеку?).

В случае, если это полезно, из applicationHost.config IIS:

<security>
  <authentication>
    <anonymousAuthentication enabled="true" />
    <digestAuthentication enabled="false" />
    <basicAuthentication enabled="false" />
    <windowsAuthentication enabled="true" useKernelMode="false">
      <providers>
        <clear />
        <add value="NTLM" />
      </providers>
    </windowsAuthentication>
  </authentication>
</security>

Есть идеи, в чем может быть проблема?

Заранее спасибо за любые предложения.

Обновление 1

Мне удалось найти другой сервер IIS7 для тестирования, и я обнаружил, что если отключить анонимный доступ, то все работает как надо. Однако у меня все еще есть проблемы на оригинальном сервере IIS7, даже когда я отключил анонимный доступ (сейчас я держу Anonymous отключенным). Значит, проблема находится дальше по стеку. Есть идеи? Что-то, что мне нужно исправить, поскольку это будет продолжать всплывать и кусать нас, как я представляю.

Обновление 2

Если я включаю Digest Authentication на проблемном IIS7, то у меня появляется диалог с запросом на вход, и все работает, как ожидалось, если я предоставляю подходящие учетные данные. Но поскольку это внутреннее веб-приложение с пользователями, уже вошедшими в домен, мы не хотим вызывать их таким образом. Учетные данные должны передаваться прозрачно, как это работает на втором ящике IIS7.

Обновление 3

Некоторый прогресс... Я обнаружил, что если веб-приложение находится в корне сайта, а не на подсайте, то прямое редактирование файла applicationHost.config для IIS7 с указанием следующих параметров аутентификации позволяет сайту работать, как ожидалось:

<authentication>
  <anonymousAuthentication enabled="false" />
  <windowsAuthentication enabled="true">
    <providers>
      <clear />
      <add value="NTLM" />
    </providers>
  </windowsAuthentication>
  <digestAuthentication enabled="false" />
</authentication>

Использование пользовательского интерфейса IIS7 для настройки аутентификации дает не совсем правильные результаты. Элементы аутентификации либо отсутствуют (как я полагаю, IIS7 считает, что они наследуются), либо имеют неправильные настройки (windowsAuthentication, похоже, нуждается в конфигурации провайдеров, указанной выше, чтобы работать правильно).

К сожалению, веб-приложение, о котором идет речь, на самом деле является подприложением, поскольку есть внутренняя версия (использующая аутентификацию windows > www.site.com/internal) и внешняя версия (использующая аутентификацию forms > www.site.com/external). Я все еще не могу заставить аутентификацию работать в качестве подприложения. Я просто получаю "Код ошибки: 403 Forbidden".

8
задан Gavin 4 October 2011 в 01:48
поделиться