авторизация 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)


arrow_upward
6
arrow_downward

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

arrow_upward
2
arrow_downward

Попробуйте добавить элемент управления 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

arrow_upward
1
arrow_downward

Вы можете поместить новый файл 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