#asp.net-mvc #forms-authentication #http-status-code-302
#asp.net-mvc #формы-аутентификация #http-status-code-302
Вопрос:
У меня есть некоторые включения на странице входа, css-файл и js-файл.
<link rel="stylesheet" type="text/css" href="../../ext/resources/css/ext-all.css" />
<script type="text/javascript" src="../../ext/bootstrap.js"></script>
запросы, которые браузер выполняет для них, получают ответ 302. Forms Auth рассматривает запрос как несанкционированный и перенаправляет их на страницу входа. Он не понимает, что запросы поступают в первую очередь со страницы входа.
GET http://localhost:50880/ext/resources/css/ext-all.css HTTP/1.1
HTTP/1.1 302 Found
<html><head><title>Object moved</title></head><body>
<h2>Object moved to <a href="/Account/LogOn?ReturnUrl=/ext/resources/css/ext-all.css">here</a>.</h2>
</body></html>
Я подумал, что, возможно, установка разрешений для папки includes (ext) для всех может помочь.
Ответ №1:
У меня была такая же проблема. Вот как я это решил.
В IIS7 перейдите на свой веб-сайт, затем дважды щелкните кнопку аутентификации. Нажмите на анонимную аутентификацию, затем нажмите Редактировать… ссылка с правой стороны. Убедитесь, что установлен флажок «Идентификатор пула приложений».
Мой пул приложений запущен под пользователем «Network Service» (не «ApplicationPoolIdentity»). Вы можете выбрать идентификатор в дополнительных настройках вашего пула приложений в IIS. Этому пользователю предоставлен полный доступ к файловой системе веб-сайта.
Комментарии:
1. Этот ответ должен быть более доступным в Интернете — так много копания, и это исправило ситуацию так быстро.
2. Спас меня от большого разочарования. Спасибо.
3. Боже, почему это не настроено по умолчанию?
4. Да, это была моя проблема, она была установлена для конкретного пользователя IUSR или как там называется эта учетная запись. Переключил его на идентификатор пула приложений, и БУМ, он работает.
5. Как раз в тот момент, когда я собирался выбросить свой компьютер из окна, этот человек с его мудрыми словами спас меня.
Ответ №2:
Вам необходимо исключить аутентификацию файлов css и изображений следующим образом в файле конфигурации. Используя тег location, вы можете исключить отдельный файл или каталог.
<location path="<RELATIVE_PATH_OF_YOUR_RESOURCE_FILES>">
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</location>
Комментарии:
1. Спасибо, об этом я не знал. Сказав это, если я создам, возможно, новый проект ASP или MVC, страница входа правильно получит CSS без чего-либо подобного в web.config. Есть идеи?
2. Вам нужно указать страницу входа в файл конфигурации, чтобы, если пользователь не аутентифицирован, куда он будет перенаправлен? Я не уверен, указываем ли мы страницу входа в этом случае, нужно ли нам исключать css и файл изображения или нет, это мне нужно проверить <режим аутентификации =»Forms»> <forms loginUrl=»Login.aspx» timeout = «30» name =». ASPXAUTH» path=»/» requireSSL=»false» SlidingExpiration=»true» defaultUrl=»Default.aspx» /> </аутентификация>
3. У меня возникло недопонимание, что по умолчанию приложение mvc запрещает доступ всем пользователям anon. На самом деле, если я добавлю это в web.config, то это действительно заблокирует css по умолчанию на странице входа. Я работаю на частном сайте, поэтому подход блокировки всех и принудительного входа в систему работает лучше. В этом случае я использовал ваше решение для открытия частей приложения, таких как скрипты и содержимое. Спасибо!
4. Я понял это. Это было то, что я пропустил из своего контрольного списка при настройке нового приложения IIS: выберите приложение, дважды щелкните «Аутентификация», выберите «Анонимная аутентификация», затем отредактируйте и измените его, чтобы использовать идентификатор пула приложений. Убедитесь, что у пользователя есть разрешения на папку, содержащую сайт.
5. Для меня это тоже не решило проблему, но я нашел свою проблему — файлы CSS / JS были зашифрованы (через NTFS), и я просто перетащил их в проект, чтобы они оставались зашифрованными. Снятие флажка «Зашифрованный» в разделе «Свойства» для файлов решило проблему.
Ответ №3:
Итак, вот что я сделал, что полностью решило проблему.
Во-первых, я внес изменения в web.config, как и все остальные, которые сказали сделать.
Я использую анонимную аутентификацию в IIS, и, как указано в этом выпуске, я зашел в IIS> Пулы приложений> Щелкнул правой кнопкой мыши мой пул приложений> Редактировать> изменил пул приложений, чтобы использовать идентификатор пула приложений.
ЗАТЕМ я перешел в родительскую папку, содержащую мой сайт, зашел в раздел разрешения для этой папки и добавил учетную запись СЕТЕВОЙ СЛУЖБЫ сервера для доступа к папке. Это сделало это за меня. Это потому, что пул приложений работает под управлением ApplicationPoolIdentity, который является учетной записью СЕТЕВОЙ СЛУЖБЫ на локальном компьютере.
Надеюсь, это кому-то поможет!
Ответ №4:
Проблема, с которой я столкнулся, заключалась в том, что я загрузил плагин jquery из Интернета и скопировал его в свой каталог содержимого на веб-сервере, и Windows заблокировала все файлы под ним, чтобы веб-сервер не мог получить к ним надлежащий доступ. Разблокировка файлов в Windows решила проблему.
Комментарии:
1. 1 здесь, для всех, кто сделал все вышеописанное и все еще сталкивается с этой проблемой, проверьте, не блокирует ли Windows файл. Раньше со мной такого никогда не случалось, я понятия не имел, что Windows даже сделала это
Ответ №5:
Поздний ответ здесь, но я хотел помочь пролить некоторый свет на этот IISsue. (видите, что я сделал?)
Во-первых, я хочу сказать, что ответ Дэвида Конлиска — это беспроигрышный ответ «вбивай-это-в-голову -исправляй-это-каждый-раз». Но в случае, если вы похожи на меня и развернули много приложений с формами и анонимной аутентификацией, где идентификатор анонимной аутентификации установлен в IUSR, и внезапно я вижу эту проблему сейчас, тогда послушайте, как я воспроизвел проблему, и, надеюсь, вы будете избавлены от такой же участи.
Моя стандартная практика заключается в том, чтобы AppPoolIdentity моего веб-приложения запускался как Сетевая служба. Затем я просто перехожу к фактическому каталогу на диске, на который указывает виртуальный каталог -> щелкните правой кнопкой мыши -> Свойства -> Вкладка Безопасность -> Редактировать -> Добавить пользователя сетевой службы -> Предоставить разрешения на чтение / запись.
Затем я включаю анонимную аутентификацию в каталогах, которые мне нужны (js, css и т.д.). Идентификатором пула приложений по умолчанию является IUSR.
ОК. Теперь внезапно в моей среде разработки я начинаю получать 302 перенаправления forms auth на все мои css и js! Что произошло? Я переключил SVN в своем веб-приложении на другую ветку в системе управления версиями. Тьфу. Это полностью отключило все мои разрешения на диске для каждого отдельного файла. Единственный способ, которым я когда-либо мог это исправить, — это удалить все веб-приложение, выполнить новую проверку и повторно применить разрешения на чтение сетевой службы (или применить разрешения к каждому отдельному файлу … и да, я пробовал удалять и повторно добавлять разрешения в папке родительского уровня).
Итак, на этот раз я решаю «черт с ним. Я запускаю свое веб-приложение от имени локальной системы. Это покажет права доступа к диску, чей босс. Это время от времени срабатывало у меня как краткосрочный обходной путь.» Но, увы, не сегодня. Я клянусь вам, что на моих глазах я просматриваю два развертывания веб-приложения forms auth с точно такой же конфигурацией, и проблема 302 воспроизводится только на моем компьютере разработчика. Единственное отличие заключается в недавнем переключении SVN на моем компьютере.
Как только я вхожу в систему и получаю файл Cookie Forms Auth, js и css загружаются просто отлично.
Потерпите, я только что сделал шокирующее открытие. Все серверы, на которых я это развернул, имеют разрешения на чтение, предоставленные MACHINE_NAME Users. А моя машина для разработки этого не делает. Как только я добавил это на свой компьютер разработчика, я смог загрузить свой css.
TLDR;
Мораль истории в том, что вы можете сохранить анонимный идентификатор аутентификации как IUSR, но тогда вам придется предоставить всем пользователям разрешения на чтение в вашем веб-приложении на диске.
Поскольку это плохая идея (по соображениям безопасности), я собираюсь применить свою новую практику, чтобы принять ответ Дэвида Си и заставить анонимное удостоверение аутентификации запускаться как удостоверение пула приложений.
Комментарии:
1. Хотя это было давно, и поскольку вы используете жирный шрифт для выделения определенных частей, было бы неплохо указать, что использование локальной системы = проблема безопасности 😉
2. ха-ха, вот почему я сказал «к черту это!» Хороший вызов, хотя я не должен считать само собой разумеющимся, что люди знают, что запускать веб-приложения как локальную систему — плохая идея 🙂