Я разрабатываю веб-приложение .NET для ASP.NET и пытаюсь запретить всем пользователям, которым не разрешен доступ к моему приложению, но разрешаю им только страницу входа.
Ниже приведен фрагмент кода, который находится внутри моего раздела system.web:
<authentication mode="Forms">
<forms loginUrl="Login.aspx" timeout="60" name="APPNAME" slidingExpiration="true" />
</authentication>
<authorization>
<deny users="?" />
</authorization>
У меня также есть это снаружи, чтобы разрешить доступ к странице входа:
<location path="Login.aspx">
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</location>
Однако я все еще могу получить доступ к страницам, когда я не вошел в систему, как я могу предотвратить это?
Я даже добавил файл Web.Config в основную папку, в которой хранится большинство файлов веб-сайта, содержимое которых:
<?xml version="1.0"?>
<configuration>
<appSettings/>
<connectionStrings/>
<system.web>
<authorization>
<deny users="?" />
</authorization>
</system.web>
</configuration>
Но это все еще не имеет никакого эффекта.
Решение
Я следовал некоторым советам по оптимизации для asp.net (http://www.codeproject.com/KB/aspnet/10ASPNetPerformance.aspx) и удалил httpModule AnonymousIdentification, который мне действительно был нужен.
Ответ 1 · рейтинг 6 · Chris Gomez
Я думаю, вы обнаружите, что гораздо проще иметь дело с авторизацией ASP.NET, если вы поместите разные веб-страницы с разными предполагаемыми ролями в разные папки. Это не требование. Просто легче управлять.
Если вы используете VS 2010 (я не уверен, что это экспресс-выпуск), попробуйте использовать инструмент настройки ASP.NET в нижней части меню "Проект".
Я обнаружил, что легко узнать, как работают файлы web.config, сначала используя этот инструмент, внеся некоторые изменения в безопасность, а затем посмотрев, что он делает.
Если вы только начинаете с пустого приложения ASP.NET в VS 2010, вы можете заблокировать все, кроме страницы входа и регистрации, внеся два изменения:
В корне web.config
<system.web>
<authorization>
<deny users="?" />
</authorization>
В web.config в подпапке Account
<?xml version="1.0"?>
<configuration>
<location path="Register.aspx">
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</location>
<system.web>
<authorization>
<allow users="?" />
</authorization>
</system.web>
</configuration>
Вы увидите, что пользователь сразу же перенаправляется на страницу входа, но все еще может зарегистрироваться.
Ответ 3 · рейтинг 1 · DeLucas
Вы можете поместить новый файл Web.config в папку, к которой необходимо применить разрешения. Внутри сделать что-то вроде этого
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.web>
<authorization>
<deny users="?" />
</authorization>
</system.web>
</configuration>
Или вам может понадобиться обернуть тег <authorization> тегом <security>.