Я хочу защитить определенные папки и ресурсы в своем приложении, которые находятся за пределами маршрутов моего приложения mvc. Я хочу, чтобы эти ресурсы были доступны только для аутентифицированных пользователей (роль которых не в поведении, если они аутентифицированы).
Первоначально казалось, что ответ UrlAuthorizationModule. Я прочитал эту статью, Понимание авторизации URL-адреса IIS 7.0, и я могу заставить модуль работать в том смысле, что он отвечает на элементы конфигурации в web.config
.
Моя текущая проблема заключается в том, что я думаю принимает правила, основанные на анонимном пользователе в IIS, а не аутентифицированный пользователь в asp.net identity.
Условия тестирования
Я использую стандартный файл html
для тестирования вместо того, чтобы пытаться загрузить script, поскольку он также будет загружен за пределы конвейера MVC.
- В
Visual Studio 2015
.- Новый веб-проект
.net 4.6.2
- Шаблон MVC
- Аутентификация =
Individual User Accounts
- Новый веб-проект
- IIS 8 (для тестирования вне Visual Studio)
- Аутентификация → Анонимная аутентификация (включена)
Добавить в web.config
<configuration>
...
<location path="Data">
<system.webServer>
<security>
<authorization>
<clear/>
<add accessType="Deny" users="*"/>
<add accessType="Allow" users="?"/>
</authorization>
</security>
</system.webServer>
</location>
...
</configuration>
Добавить в структуру папок
/Data/Protected.html // this file just has some basic Hello World content to display so you can see if it is loaded or not.
Наблюдаемые результаты
- В этой конфигурации все в пути
Data
всегда отрицается, не имеет значения, аутентифицирован ли пользователь или нет. - То же самое верно, если я переключу 2 строки для
Deny
иAllow
вweb.config
. - Если я полностью удаляю строку с помощью
Deny
, доступ всегда разрешается даже тогда, когда пользователь не аутентифицируется. - Если я добавлю роль и использую
roles
с именем роли вместо атрибутаusers
, роль также полностью игнорируется.
Теперь что?
Что мне не хватает? Как я могу получить модуль Url Authorization для работы с MVC/WebAPI и asp.net identity Individual User Accounts
или это просто не выполнимо?
Я также открыт для альтернативных идей, может быть, ответ заключается в написании пользовательских HttpModule
или HttpHandler
?
Боковые заметки
Почему и специфика
Эти ресурсы являются файлами javascript, короче говоря, часть скриптов должна быть доступна для пользователей, не прошедших проверку подлинности. В корне есть 2 каталога, один для аутентифицированной части приложения и один для не аутентифицированной части приложения. Причина этого не имеет ничего общего с авторизацией пользователя или безопасностью в приложении, она должна ограничить открытую площадь области приложения неидентифицированными запросами.