авторизация web.config запрещает несанкционированный доступ

Я разрабатываю веб-приложение .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, который мне действительно был нужен.


person Malachi    schedule 06.10.2010    source источник
comment
Вы уверены, что не вошли в систему? У вас не просто есть файл cookie для аутентификации, который все еще присутствует на вашем компьютере, и вы помните свой последний вход в систему?   -  person Paddy    schedule 06.10.2010
comment
Я только что очистил кеш/куки браузера и попробовал еще раз, и он по-прежнему позволяет мне получить доступ ко всему   -  person Malachi    schedule 06.10.2010


Ответы (3)


Я думаю, вы обнаружите, что гораздо проще иметь дело с авторизацией 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>

Вы увидите, что пользователь сразу же перенаправляется на страницу входа, но все еще может зарегистрироваться.

person Chris Gomez    schedule 06.10.2010

Попробуйте добавить элемент управления LoginStatus на свою страницу. чтобы проверить свой статус входа.

Возможно, вы ранее отметили опцию «Сохраненный пароль». Проверьте и очистите кешированный пароль с помощью команды control userpassword2.

person bla    schedule 06.10.2010
comment
Я добавил это, и он создает ссылку для входа. Так что я определенно не вошел в систему. Я просматриваю свой код/web.config на наличие проблем. - person Malachi; 06.10.2010
comment
Я исправил это - см. Выше мое решение - person Malachi; 06.10.2010
comment
Какая длинная статья. В любом случае, хорошая работа. :) - person bla; 06.10.2010

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

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.web>
        <authorization>
            <deny users="?" />
        </authorization>
    </system.web>
</configuration>

Или вам может понадобиться обернуть тег <authorization> тегом <security>.

person DeLucas    schedule 28.05.2019