Как правильно организовать регистрацию и авторизацию пользователей сайта (Java)? Доброго времени суток!
В процессе создания сайта возникла потребность в регистрации / авторизации пользователей. Используемые технологии: Для серверной части использую Java, в частности Servlet'ы. Данные пользователей и прочие изменяемые данные хранятся в PostgreSQL.Для доступа к PostgreSQL из java использую (jdbc:postgresql). В качестве контейнера для Servlet'ов использую Tomcat. Перед Tomcat'ом стоит nginx для отдачи статики. (css / js / html / img)Для передачи данных между браузером и сервером, без обновления страницы, использую AJAX (&& json). Требуемый сценарий: Пользователь попадает на страницу регистрации, создает учетную запись. Данные отправляются на сервер и сохраняются в БД. Пароль, предварительно, солится и хэшируется. (Алгоритм хэширования и порядок добавления соли еще не выбрал, это не основной вопрос, но буду рад авторитетному мнению, разбирающихся людей)После регистрации, при обращениях к определенным страницам (сервлетам), пользователь проходит процедуру авторизации. Вводит логин / пароль. Логин и пароль отправляются на сервер в post запросе. Там от пароля вычисляется хэш и сравнивается с тем что в базе. Если хэши совпадают, пользователь признается авторизованным и получает что-то, что впоследствии он будет предъявлять, при доступе к страницам, требующим авторизацию. Это что-то так же заносится в базу. И собственно сам доступ к страницам требующим авторизацию. Пользователь отправляет, это "что-то", полученное при регистрации и в ответ получает страницу. (По сути, это будет результат работы сервлета (данные), которые на стороне браузера с помощью js превращаются в страницу). Вопрос 1. Верно ли я понял процесс Регистрации и Авторизации пользователей?Вопрос 2. "Что-то" выдаваемое при авторизации, называют "токеном". Что представляет собой токен? (случайную строку, которая является по сути идентификатором? Если да - то какой она должна быть длины, нужно ли ее шифровать и где хранить на стороне клиента?) Вопрос 3. Слышал про OAuth и долго и коротко живущие токены (refresh token и access token). Как я понял основная концепция в ограничении времени доступа злоумышленника при краже токенов. Такая схема представляется более надежной, но опять же возникают те же вопросы и даже новые. Что такое токен, какая длина токена считается безопасной, нужно ли его шифровать и как его генерировать. А так же где и как хранить на стороне браузера.
В некоторых статьях предлагается при обновлении любого из токенов, присылать новую пару токенов (вместо одного, обновляемого), в связи с этим возникает вопрос, как решается ситуация, когда Пользователь запросил обновление refresh token и в этот момент потерял связь (не смог получить новую пару). После восстановления связи пользователь пытается запросить обновление токенов еще раз (используя старый refresh token). Однако на сервере уже хранится новый refresh token, тот самый что не дошел до пользователя. И все что остается пользователю это повторная авторизация (логин / пароль). Стоит ли переживать в реальной жизни из-за такой ситуации? или это допустимое и очень редкое затруднение, которое не будет заставлять пользователей постоянно, снова и снова вводить свой пароль? Вопрос 4. Достаточен ли уровень безопасности OAuth или стоит искать что-то другое? jwt?

21 Авг 2019 в 07:12
218 +1
0
Ответы
1

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

Ваше понимание процесса регистрации и авторизации пользователей в целом верно. Пользователь регистрирует учетную запись, при этом его данные хэшируются и сохраняются в базе данных. При авторизации пользователь вводит логин и пароль, который хэшируется и сравнивается с хэшем в БД. Если совпадение найдено, пользователь признается авторизованным.

Токен, который выдается при успешной авторизации, может быть случайной строкой, которая идентифицирует пользователя. Обычно он имеет достаточно длину, например, 128 бит (32 символа). Токен может быть зашифрован, но вам стоит также рассмотреть возможность использования HTTPS для защиты передачи данных между клиентом и сервером. Токен обычно хранится на стороне клиента (например, в localStorage или в cookie).

OAuth и долго/коротко живущие токены (refresh token и access token) в целом хорошая практика для обеспечения безопасности при авторизации. Access token обычно имеет более короткое время жизни, чем refresh token, и его обновление может потребовать передачи refresh token. Если пользователь потерял связь и не смог получить новую пару токенов, то он действительно может потерять доступ и должен будет повторно пройти авторизацию. Это допустимое и редкое затруднение, которое не следует воспринимать как серьезный недостаток.

Относительно уровня безопасности OAuth можно сказать, что он обеспечивает достаточно высокий уровень безопасности при правильной его реализации. Однако jwt (JSON Web Tokens) также является хорошим вариантом для обмена безопасной информацией между сторонами. Вы можете рассмотреть варианты и выбрать тот, который лучше подходит для вашего проекта.

Надеюсь, эти ответы помогут вам разобраться с вопросами по регистрации и авторизации пользователей на вашем сайте! Если у вас возникнут еще вопросы, не стесняйтесь задавать их. Удачи в работе над проектом!

20 Апр в 13:06
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 548 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир