Почему моя таблица стилей перенаправляет меня на вход?

Я уверен, что это как-то связано с IIS, но я не могу понять.

У меня есть веб-сайт, использующий проверку подлинности с помощью форм. Когда мой веб-сайт пытается получить доступ к любым файловым ресурсам (файлы javascript, css и т. д.), я перенаправляюсь на страницу входа в систему, указанную в моем файле web.config. Меня также перенаправляют, если я просто ввожу адрес в адресную строку.

Запись web.config для аутентификации форм довольно проста:

<authentication mode="Forms">
  <forms loginUrl="~/Account/LogOn" timeout="2880" />
</authentication>

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

<location path="n2">
  <system.web>
    <authorization>
      <allow roles="Editors" />
    </authorization>
  </system.web>
</location>
<location path="web.config">
  <system.web>
    <authorization>
      <deny users="*" />
    </authorization>
  </system.web>
</location>

Я использую стандартную установку IIS7 на Windows Server 2008 R2.

Изменить Итак, если я добавлю случайный файл cookie аутентификации (FormsAuthentication.SetAuthCookie()), ресурсы станут доступными, я знаю, что это должна быть моя модель аутентификации, которая каким-то образом испорчена. Он работает на другом сервере (я просто скопировал). Любые идеи, как я могу отследить проблему?


person scottm    schedule 09.11.2010    source источник
comment
Вы когда-нибудь решали это? Имея точно такую ​​же проблему.   -  person starskythehutch    schedule 09.03.2011


Ответы (7)


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

  1. Откройте IIS
  2. Развернуть сайты
  3. Выберите [Ваш веб-сайт]
  4. Дважды щелкните «Аутентификация» (будет находиться в разделе «Область» IIS или «Категория безопасности»)
  5. Выберите анонимную аутентификацию
  6. Нажмите «Изменить» на панели «Действия».
  7. Щелкните переключатель «Идентификатор пула приложений».
person Fergal Moran    schedule 06.05.2011
comment
И для тех, кто ищет, где это сделать: Диспетчер информационных служб Интернета (IIS) -> Сайты -> Веб-сайт по умолчанию -> [Ваш веб-сайт] -> Проверка подлинности -> Анонимная проверка подлинности -> Редактировать -> Идентификатор анонимного пользователя: Идентификатор пула приложений - person Julian; 13.08.2013
comment
На сервере 2012 iis 8.5 › Сайты › [домашний сайт] › (в группе IIS) Аутентификация › Анонимная аутентификация – Изменить › идентификатор пула приложений (dropbox.com/s/8ytk3zwkyqsmm0c/iis8_anon_creds.png?dl=0) - person jaybro; 06.01.2015

Не используйте теги <location> в файле web.config для обработки авторизации в приложении ASP.NET MVC, поскольку местоположения больше не имеют смысла. Все, что вам нужно в web.config, это тег authentication. В MVC авторизация может быть достигнута путем оформления соответствующих контроллеров и/или действий с помощью [Authorize].

person Darin Dimitrov    schedule 10.11.2010
comment
У меня есть приложение веб-форм в каталоге внутри моего проекта mvc. Судя по всему, расположение имеет смысл, потому что без записи для N2 пользователи не перенаправляются для входа в систему. - person scottm; 10.11.2010
comment
Я не согласен, теги местоположения действительно используются в приложениях MVC. Мне пришлось использовать их, чтобы разрешить анонимный доступ к двум папкам статических ресурсов. - person Kev; 11.11.2010
comment
Я тоже не согласен. Я использую их для папки с содержимым и для страниц входа/регистрации. - person rboarman; 12.11.2010

Я использую allow * для папки Content. Это предотвратит любую авторизацию для статического контента.

  <location path="Content">
    <system.web>
      <authorization>
        <allow users="*" />
      </authorization>
    </system.web>
  </location>

Рик

person rboarman    schedule 09.11.2010
comment
Заархивируйте свой проект и отправьте мне, если хотите. ррб на matrix6 точка ком. Или, что еще лучше, создайте небольшой тестовый проект, в котором будут только самые необходимые элементы, необходимые для возникновения проблемы. - person rboarman; 10.11.2010

В IIS моя анонимная аутентификация была включена правильно, и для пользователя был установлен IUSR. Поэтому мне нужно было зайти в проводник Windows, перейти в каталог моего веб-приложения, щелкнуть правой кнопкой мыши «Свойства», вкладку «Безопасность», кнопку «Изменить» и предоставить IUSR разрешения «Чтение», «Список» и «Чтение и выполнение» (набор по умолчанию). Убедитесь, что изменения будут унаследованы всеми дочерними элементами, примените, возможно, подождите, и все готово.

person Tyler Forsythe    schedule 13.04.2016

Прошло много времени с тех пор, как я работал с формами asp.net, но первые вопросы будут такими: вы уверены, что ваш пользователь является членом роли «Редакторы». Я думаю, вы можете использовать инструмент администрирования веб-сайта, чтобы настроить это? http://msdn.microsoft.com/en-us/library/ssa0wsyf.aspx

person Ben Cawley    schedule 09.11.2010
comment
Я даже не пытаюсь найти путь, требующий роли редактора, но я уверен, что я на нем. - person scottm; 09.11.2010

Это потому, что вы установили запрет на всех. В IIS 7 из-за встроенного конвейера вы будете перенаправлены, даже когда попытаетесь просмотреть CSS или любую статическую страницу.

Поместите статический контент в папку, если хотите, и разрешите доступ к нему.

person Rahul Soni    schedule 09.11.2010
comment
Разве я не говорю только о том, что всем запрещен доступ к файлу web.config? Даже если я удалю эти два последних узла местоположения, произойдет то же самое. - person scottm; 09.11.2010
comment
Ооо... извините за отсутствие этой части web.config. Можете ли вы попробовать добавить дополнительные разрешения для анонимных пользователей? ‹разрешить пользователям=? /› - person Rahul Soni; 09.11.2010
comment
Вы также можете попробовать простое новое приложение и посмотреть, сможете ли вы просматривать статические файлы или нет. ЕСЛИ, случайно, даже это не сработает... Я бы порекомендовал проверить, содержит ли имя вашей машины символ подчеркивания. - person Rahul Soni; 09.11.2010

У меня было то же самое, и я обнаружил, что это произошло потому, что я забыл разрешить анонимный доступ к веб-сайту изнутри IIS! Это означало, что FormsAuthentication всегда срабатывала, даже для статических ресурсов, которые не были защищены.

person starskythehutch    schedule 19.03.2011