#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] для контроллера / действия, которое вы хотите защитить.
Как правило, вы не хотите защищать контроллер учетной записи.
Еще одна полезная ссылка.