Как правильно организовать регистрацию и авторизацию пользователей сайта (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
203 +1
0
Ответы
Нет ответов
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 83 683 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир