возможна ли аутентификация с помощью клиентского приложения и сеансов? - PullRequest
0 голосов
/ 30 мая 2018

Независимо от того, как я рассуждаю об этом, создается впечатление, что не существует безопасного способа реализации визуализированного одностраничного приложения на стороне клиента, которое использует / получает доступ к информации о сеансах для аутентификации, либо с помощью файлов cookie, без серьезного нарушения безопасности,В основном я пытался создать приложение React, но мне кажется, что мне нужно собрать его с SSR для относительно безопасной версии аутентификации.

Случай использования, о котором я особенно думаю, - это когдапользователь входит в систему или регистрируется, а затем получает cookie с идентификатором сеанса.Оттуда, в реализации на стороне сервера, я могу просто настроить условный рендеринг в зависимости от того, имеет ли сохраненный на сервере сеанс связанный идентификатор пользователя или нет, а затем вытащить оттуда информацию о пользователе и отобразить ее.

Однако,Я не могу придумать решение для клиентской стороны, где пользователь может использовать идентификатор сеанса только в файле cookie, который нелегко подделать.Некоторые из небезопасных реализаций будут включать использование хранилища браузера (локальное / сессионное).Спасибо.

1 Ответ

0 голосов
/ 30 мая 2018

Я думаю, что главная проблема здесь в том, что вы смешиваете две части веб-страницы (по крайней мере, в соответствии с тем, что задано в HTML) и рассматриваете их обе как конфиденциальную информацию.

У вас есть две основныечасти веб-страницы - первая - это формат отображения, а вторая - данные.Предположение в клиентском рендеринге / одностраничных приложениях заключается в том, что сам формат не является конфиденциальным, и необходимо защищать только данные.

Если это так, вы должны рассматривать перенаправление на стороне клиента для поведения входа в систему какособенность качества жизни.Конечные точки данных на вашем сервере по-прежнему будут защищены - это означает, что теоретически не прошедший проверку подлинности пользователь может копировать статический HTML, который ему обслуживают, и извлекать макеты страниц и шаблоны - но это было бы бессмысленно без данных для их заполнения - что являетсязащищенная часть.

На практике ваш конечный продукт будет представлять собой одностраничное приложение, которое отправляет запросы различным конечным точкам API для получения данных и заполнения запрошенных шаблонов страниц.Вам даже не нужно было бы заходить так далеко, чтобы хранить сложные состояния сеанса - достаточно простого флага, уведомляющего клиента о том, аутентифицирован он или нет (это выходит за рамки того, что вы обычно используете для аутентификации на стороне сервера, такой как куки или токены)

Теперь давайте предположим, что я - злонамеренный пользователь, у которого нет ничего хорошего - я мог бы «подделать» - или просто открыть инструменты разработчика браузера и установить флаг isAuthenticated в true, позволяя мне пропустить экран входа в систему.- что теперь я буду делать?Теоретически я мог бы перейти к my-service / super-secret без локального перенаправления обратно на страницу входа на стороне клиента - и затем, как только соответствующая страница попытается загрузить данные с сервера с несуществующими учетными данными, произойдет сбой -в лучшем случае выводится сообщение об ошибке, в худшем - с некоторым внутренним исключением, а в представлении отображается поврежденный шаблон.

Итак, коротко подчеркну:

A.Если вы хотите защитить свой ШАБЛОН , то достичь этого клиента невозможно.

B.Если вы хотите защитить свои ДАННЫЕ , то вы должны рассматривать или запрещать пользователям переходить на защищенные страницы как функцию качества жизни, а не функцию безопасности, поскольку она будет реализована на сервере при обслуживании.данные для этой конкретной страницы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...