.ASPX: Как ограничить доступ в Интернет только для авторизованных пользователей?

Проблема: любой человек может получить доступ к веб-странице, но я хочу, чтобы только зарегистрированные пользователи имели право доступа к ней.


Фон:

  • Веб-сервер = IIS 8
  • Серверная ОС = Windows Server 2012
  • Framework = .NET 4.5
  • Среда =. \ WebFolder \ logon.aspx,. \ WebFolder \ inside.html
  • Веб-сайт = Простая страница входа в систему ("logon.aspx"), которая защищает HTML-страницу ("inside.html").
  • Пользователи = Внешние люди (т. Е. Люди, не входящие в интранет)

Примеры URL:

    A. "www.webpage.com/logon.aspx"
    B. "www.webpage.com/inside.html"

Желаемый результат:
Все могут получить доступ к странице «logon.aspx»
Только зарегистрированные пользователи могут получить доступ к странице «inside.html»
Любые прямые попытки доступа к «Б» вызовут перенаправление на «А» "
Никакого дополнительного использования программного кода

Предыдущие попытки: я возился с файлом web.config (аутентификация и авторизация), но безрезультатно (ошибка сервера 501, ошибка авторизации 401, ошибка приложения времени выполнения).


Файл Web.Config:
<system.web>
<authentication>
<forms name=".ASPXFORMSAUTH" loginUrl="logon.aspx" protection="All" timeout="1" path="/" slidingExpiration="true" requireSSL="false" />
</authentication>
<authorization></authorization>
</system.web>


Итог: я уверен, что это очень простая вещь в настройке, просто я пока не могу это сделать. Кроме того, я не хочу писать дополнительный код для выполнения, казалось бы, фундаментальной задачи.

Заранее спасибо!


person Elias    schedule 22.02.2017    source источник
comment
Можете ли вы попробовать переименовать свою страницу logon.aspx в login.aspx? Или, в качестве альтернативы, добавьте новый узел форм к узлу аутентификации в файле web.config, например: ‹forms loginUrl = ~ / logon.aspx /›. Не могли бы вы опубликовать соответствующий образец вашего файла web.config?   -  person SeanOB    schedule 23.02.2017
comment
@SeanOB: Новая попытка: изменен logon.aspx на login.aspx. Результат = Ошибка (без изменений). Пожалуйста, проверьте новый раздел web.config выше. Спасибо.   -  person Elias    schedule 23.02.2017
comment
Я думаю, вам нужно использовать поставщика членства или что-то в этом роде. Основная идея состоит в том, чтобы отмечать пользователей как вошедших в систему или нет. Простая реализация заключалась бы в проверке метода загрузки страницы (предположительно при правильных вхождениях обратной передачи): If Not IsLoggedIn() Then Response.Redirect("somepage.aspx") End If   -  person Mahendran Nadesan    schedule 23.02.2017
comment
@SeanOB, спасибо, ребята. Я думаю, что у меня есть решение для этого ограничения файла .aspx на .html (через 7+ часов :))   -  person Elias    schedule 23.02.2017


Ответы (1)


Ладно разобрался (через 7 часов). Для этого требуются четыре вещи (на основе структуры файла примера):


1. Использование модуля FormsAuthentication

VS2012 → Проект → Ваши учетные данные / код аутентификации → Используйте FormsAuthentication.RedirectFromLogin(_var1_, _var2_) вместо Response.Redirect(inside.html)


2. Добавление нового узла в файл web.config.

<system.webServer><handlers><add name="HTMLHandler" type="System.Web.StaticFileHandler" path="*.html" verb="GET" /></handlers>


3. Включение атрибута defaultUrl в тег Forms

<forms name=".ASPXFORMSAUTH" loginUrl="logon.aspx" defaultUrl="inside.html" protection="All" timeout="1" path="/" slidingExpiration="false" requireSSL="false" />


4. Добавление ограничения авторизации тега местоположения в файл web.config.

<location path="inside.html"><system.web><authorization><deny users="?" /></authorization></system.web></location>

См. Мои комментарии (ниже) для объяснения каждой из этих четырех частей.

person Elias    schedule 23.02.2017
comment
№1. Вам необходимо использовать объект FormsAuthentication, потому что он передает учетные данные на сервер. Это важно, потому что именно сервер (а не приложение) управляет страницей .html. Команда Response.Redirect не может этого сделать. - person Elias; 23.02.2017
comment
№2. Вы должны добавить HTMLHandler в web.config файл, потому что он сообщает IIS о том, что ваше приложение .net может управлять подключением страницы .html. Это очень важно (поскольку шаг №4 без него не работал бы). - person Elias; 23.02.2017
comment
№3. Важно добавить атрибут defaultUrl к тегу forms, чтобы FormsAuthentication.RedirectFromLogin всегда приходил к месту назначения (inside.html). Если переменная ReturnUrl не указана, команда RedirectFromLogin перейдет к этому DefaultUrl. Значение loginUrl на шаге 2 становится значением ReturnUrl после неудачной аутентификации. - person Elias; 23.02.2017
comment
№4. Вы должны создать эту авторизацию пути к местоположению, чтобы система предотвратила несанкционированный доступ к вашему html-файлу (inside.html). Элемент deny users="?" сообщает системе, что необходимо заблокировать несанкционированный доступ к вашей запрещенной html-странице. - person Elias; 23.02.2017