Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: MalachiОтветов: 3

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

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

authorization

Ответы

Ответ 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>

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

Ответ 2 · рейтинг 2 · bla

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

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

Ответ 3 · рейтинг 1 · DeLucas

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

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

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы