ASP.NET MVC 3: я не могу перейти к своему каталогу «Содержимого», пока не авторизован

#asp.net #authentication #asp.net-mvc-3

#asp.net #аутентификация #asp.net-mvc-3

Вопрос:

Все, я впервые развертываю приложение MVC 3 на тестовом сервере. Приложение запускается, как и ожидалось, локально из Cassini. Однако на сервере через IIS он не будет отображать CSS, пока я не пройду аутентификацию. Если я пытаюсь перейти к localhost / Content /Site.css, он перенаправляет меня на страницу входа в систему. Я проверил в IIS, и анонимная аутентификация включена.

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

Спасибо!

Ответ №1:

У меня была похожая проблема. Для меня ответом было предоставить разрешения на чтение папки IUSR, а также IIS_IUSRS.

Ответ №2:

Добавьте следующее в свой web.config. Вы должны сообщить asp.net что к следующему каталогу можно получить доступ независимо от того, аутентифицированы вы или нет. Это относится к настройке конфигурации в вашем web.config.

 <configuration>
...

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

...

<system.web>
<authorization>
  <deny users="?" />
</authorization>
</system.web>
.....

</configuration>
  

Комментарии:

1. На самом деле у меня это уже есть. Кроме того, у меня также есть строка для <разрешить пользователям =»?» /> для тех, кто не прошел проверку подлинности.

2. Это выдержка из моего. Я исключил совсем немного. Убедитесь, что у вас есть элемент <location>, который является прямым потомком элемента <configuration>.

3. Я по-прежнему не получаю никаких css, а также не могу перейти непосредственно к моему файлу Content / site.css.

4. Вы правильно редактируете web.config в корневом каталоге вашего проекта? Не web.config в каталоге / Views.

5. Похоже, что это была проблема с разрешениями. Я скопировал весь каталог поверх каталога в моем каталоге wwwroot. Мне пришлось повторно добавить сетевую службу и IUser в качестве «пользователей», имеющих доступ к моему каталогу приложений.

Ответ №3:

Посмотрите на разрешения для файлов и убедитесь, что они соответствуют файлам, которые вы можете сопоставить. Во-вторых, проверьте свой web.config, чтобы убедиться, что вы не используете там элементы авторизации, такие как:

 <authorization>
    <allow users="user1, user2"/>
    <deny users=”?”/>
</authorization>
  

Комментарии:

1. ок, круто — значит, это были разрешения. Также, согласно предыдущему упоминанию узлов авторизации в web.config, это не рекомендуемый способ обеспечения безопасности mvc. Следует использовать атрибут [Authorize]. Конечно, иногда вам нужно защитить папки с другим содержимым, но все, что связано с конкретными элементами mvc, должно использовать атрибут авторизации, а не способ использования атрибутов авторизации в веб-формах, поскольку в MVC несколько URL-адресов иногда могут приводить к одному и тому же контроллеру / методу действия. Защита URL-адреса в этом случае очень подвержена ошибкам.

Ответ №4:

Вы не можете использовать файлы маршрутизации или web.config для защиты своего приложения MVC. Единственный поддерживаемый способ защитить ваше приложение MVC — это применить атрибут [Authorize] к каждому контроллеру и методу действия (за исключением методов входа / регистрации). Принятие решений о безопасности на основе текущей области — это очень плохо и откроет уязвимости вашего приложения.

Вы можете прочитать больше здесь.

Вы можете управлять своим методом аутентификации в вашем файле web.config:

 <authentication mode="Forms">
  <forms loginUrl="~/Account/LogOn" defaultUrl="~/Home/Index" timeout="2880" protection="All" slidingExpiration="true" />
</authentication>
  

затем вы должны использовать атрибут [Authorize] для контроллера / действия, которое вы хотите защитить.
Как правило, вы не хотите защищать контроллер учетной записи.

Еще одна полезная ссылка.