Настройка режима аутентификации подкаталога в приложениях, размещенных на корневом сайте - PullRequest
18 голосов
/ 09 сентября 2011

На своем локальном компьютере я работаю на нескольких веб-сайтах и ​​запускаю их под IIS на веб-сайте по умолчанию. Таким образом, я могу получить доступ к сайтам через URL этого типа: http://localhost/App1/. Вот структура:

LocalDev (site)
    App1 (application)
    App2 (application)
    App3 (application)

Проблема, с которой я сталкиваюсь, заключается в том, что в App1 я пытаюсь включить проверку подлинности Windows в подкаталоге App1, например:

<configuration>
  <location path="internal">
    <system.web>
      <authentication mode="Windows"/>
      <authorization>
        <allow users="*"/>
      </authorization>
    </system.web>
  </location>
</configuration>

К сожалению, когда я пытаюсь получить доступ к http://localhost/App1/internal/url.aspx,, я получаю эту ошибку:

Ошибка использовать раздел, зарегистрированный как allowDefinition = 'MachineToApplication' за пределами уровня приложения. Эта ошибка может быть вызвана тем, что виртуальный каталог не настроен как приложение в IIS.

App1 устанавливается как приложение, а не как виртуальный каталог. Я попытался изменить мой machine.config, чтобы разрешить изменять раздел аутентификации в любом месте:

<configuration>
  <configSections>
    <sectionGroup name="system.web" type="System.Web.Configuration.SystemWebSectionGroup, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
      <section name="authentication" type="System.Web.Configuration.AuthenticationSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="Everywhere"/>
    </sectionGroup>
  </configSections>
</configuration>

Что мне нужно сделать, чтобы мои сайты могли устанавливать свои собственные режимы аутентификации?

Ответы [ 5 ]

19 голосов
/ 20 сентября 2011

Необходимо включить проверку подлинности Windows на уровне приложения в файле Web.config, а затем дополнительно определить авторизацию на уровне папки, разрешив всем пользователям в корневом каталоге и запретив все не прошедшие проверку подлинности для папки internal.

В IIS убедитесь, что для приложения включены Анонимная аутентификация и Аутентификация Windows . Затем измените ваш Web.config следующим образом:

<configuration>
  <system.web>
      <authentication mode="Windows"/>
      <authorization>
        <allow users="*"/>
      </authorization>
  </system.web>
  <location path="internal" allowOverride="true">
    <system.web>
      <authorization>
        <deny users="?"/>
      </authorization>
    </system.web>
  </location>
</configuration>
2 голосов
/ 18 сентября 2011

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

Вам необходимо создать подкаталоги как веб-приложения в IIS.

Если вы говорите, что дочерний подкаталог на самом деле уже является веб-приложением в IIS (ошибка предполагает, что это не так), то вам нужно отключить наследование. Это не имеет никакого отношения к тому, есть ли у вас web.config в корне. Если нет, это просто означает, что он использует настройки конфигурации машины по умолчанию.

Вы можете отключить наследование, добавив в корень web.config со следующим элементом, обертывающим ваш system.web.

<location path="." inheritInChildApplications="false">
   <system.Web>
       ...
   </system.Web>
</location>
0 голосов
/ 20 сентября 2011

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

Подробнее здесь: http://learn.iis.net/page.aspx/150/understanding-sites-applications-and-virtual-directories-on-iis-7/

Я думаю, вам понадобится файл web.config в корневом каталоге, даже если он более или менее пуст, и установите для allowSubDirConfig значение true.

0 голосов
/ 18 сентября 2011

Я вижу эту проблему время от времени, и всегда было так, что сервер не распознает ее как настроенную сеть. Если это возможно, вы можете удалить приложение и затем преобразовать каждый подкаталог обратно в его собственное приложение.

Это всегда исправляло меня. Двойная и тройная проверка того, что подкаталоги установлены как приложения.

Также, чтобы избежать других проблем, поскольку вы настраиваете аутентификацию Windows, проверьте настройки NTLM vs Kerberos. Обычно это другое сообщение об ошибке, или оно просто не проходит аутентификацию должным образом, но если это среда Интернета, а не среда интрасети, вам, скорее всего, потребуется отключить Kerberos.

Также убедитесь, что вы проверили, включена ли аутентификация Windows. http://technet.microsoft.com/en-us/library/cc754628(WS.10).aspx

Вы можете включить и отключить Kerberos в разделе «Дополнительные настройки» в рамках проверки подлинности Windows.

0 голосов
/ 16 сентября 2011

Я столкнулся с этой ошибкой в ​​одном из двух сценариев, оба из которых были вызваны тем, что приложения были подкаталогами общего приложения «По умолчанию»:

Подкаталоги также должныбыть работающим приложением

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

Вложенные файлы web.config

Это проблема, с которой, я думаю, вы на самом деле сталкиваетесь:

Убедитесь, чтоваша иерархия файлов web.config, , включая любые в приложении «Default» над вашими приложениями для разработки , не мешает друг другу.Помните, что в качестве подкаталога «По умолчанию» ваше приложение может по-прежнему зависеть от настроек в приложении «По умолчанию» над ним.

...