Создание безопасных «областей частного сайта» с использованием квазисерверной веб-архитектуры (магия шаблонов AJAX)

#c# #javascript #asp.net #asp.net-mvc #ajax

#c# #javascript #asp.net #asp.net-mvc #ajax

Вопрос:

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

Статические страницы, обслуживаемые клиентам, которые используют шаблоны javascript и ajax для загрузки контента, контент будет предоставляться через ASP.NET Приложение MVC, которое отправляет результаты в формате json на клиентские страницы.

Мой вопрос довольно прост: какие методы я могу использовать для предоставления частных областей пользователям моего сайта?

Единственное, что пришло мне в голову, это предоставить страницу входа, которая отправляет информацию для входа (зашифрованную) на сервер (через ajax). Затем сервер возвращает токен для сохранения в виде cookie. Для каждого последующего вызова сервера через ajax (сейчас мы говорим о частных областях) токен также должен быть отправлен и проверен, и должен быть предоставлен надлежащий результат содержимого.

Как я могу реализовать эту штуковину? Каковы проблемы безопасности и конфиденциальности?

Кстати, я использую C # на сервере, jQuery для простого управления ajax и Jquery.LoadJSON для загрузки контента. Усы для javascript для предоставления таких частичных данных и так далее. Я ищу что-то, что также позволяет мне управлять файлами cookie простым и понятным способом, предложения приветствуются.

Заранее большое спасибо!

Ответ №1:

На самом деле вы можете использовать встроенный ASP.NET Механизм аутентификации:

  • Разрешите анонимный доступ ко всем вашим страницам (при условии, что это требование).
  • Поддерживайте переменную в java-script (на стороне клиента), чтобы сообщить, прошел ли пользователь аутентификацию или нет.
  • Для доступа к любому защищенному контенту / области вызовите обычную функцию js, которая увидит, аутентифицирован текущий пользователь или нет, и если нет, то выполните соответствующие действия для аутентификации пользователя.
  • Если это аутентификация на основе форм, то ваша функция должна запрашивать у пользователя учетные данные с помощью модального диалога, а затем передавать эти учетные данные на сервер через ajax-вызов. На стороне сервера вам следует проверить учетные данные и использовать проверку подлинности в формах.Установите AuthCookie для указания успешной аутентификации на ASP.NET время выполнения. Во время выполнения будет сохраняться файл cookie аутентификации (так что вам не придется управлять токеном самостоятельно)
  • Для любого вызова ajax, обслуживающего защищенный контент, на стороне сервера вызов должен проверять, аутентифицирован ли текущий пользователь или нет (с помощью HttpContext.Current.User.Identity.IsAuthenticated ). Если нет, то вы можете перенаправить на страницу ошибки или выдать код ответа 401 (рекомендуется для схем аутентификации Windows). Вы можете добавить любую схему авторизации в свой AJAX-вызов для аутентифицированных пользователей.

Комментарии:

1. кроме того, вы можете «обслуживать» определенный js-файл только в том случае, если пользователь прошел аутентификацию. итак, изначально вы могли бы обслуживать базовый ‘common.js ‘ файл, а затем, если пользователь аутентифицируется, условно включите ‘leve2-access.js ‘ файл, который обладал дополнительной функциональностью, доступной только прошедшим проверку подлинности пользователям.

2. Довольно хорошее решение, я не думал об использовании asp.net встроенное управление аутентификацией только для части аутентификации «на стороне сервера», я думал, что это просто не сработает. Для другой стороны (клиентской части) я также нашел этот приятный маленький фрагмент кода: