TequilaOne
@TequilaOne

Как правильно реализовать авторизацию на Android и backend?

Делаю приложение с возможностью авторизации с помощью ВК.
Может ли кто-то описать или поправить? Есть несколько моментов, которые не совсем непонятны.
На данный момент схема входа такая:
1. Пользователь в приложении жмёт "Войти с помощью VK"
2. После этого он подтверждает вход.
3. Далее с помощью библиотеки VK SDK в приложении, забираем данные (accessToken, expiresIn, userId, email, state).
4. Отправляем на backend POST запрос, с данными (accessToken, userId, email)
5. С помощью полученного accessToken, на беке пробуем получить профиль юзера вк (с помощью vk sdk), чтобы удостовериться в валидности токена. В случае валидного токена, создаем юзера в БД/проверяем существует ли юзер по полученному userId из профиля вк. В случае невалидного токена, backend выбрасывает какую-нибудь 401 Error.

А вот далее не совсем понятно что делать. На backend'е в БД имеются таблицы user и user_token.
Схема таблиц следующая:
user: id, email
user_token: id, user_id (связь к колонке id из таблицы user), accessToken, refreshToken, created_at, expires_in_access_token, expires_in_refresh_token.

Создаем accessToken и refreshToken для пользователя.
Определяем время жизни токена:
поля expires_in_access_token и expires_in_refresh_token являются timestamp, и имеют время жизни 1 и 30 дней соответственно.

Далее backend должен вернуть ответ, в формате json (accessToken, refreshToken, expiresInAccessToken, expiresInRefreshToken).

В приложении сохраняем все эти данные. Допустим в sharedPrefs или Room.

Если API ручка на сервере требует токен, то забираем его из приложения и отправляем его в запросе вместе с headers.

Backend проверяет токен в БД и либо отвечает успешно (200 OK) и возвращает контент пользователя, либо выбрасывает ошибку, что токен не валидный либо истекло его время жизни?

Потом приложение должно обработать ошибку, если такая имеется:
1. В случае невалидности токена, чистим в приложении access token и refresh токен и отправляем пользователя входить через вк по новой с самого начала?
2. В случае истечении жизни access токена, отправляем POST запрос с refresh токеном на backend и проверяем его валидность и что время жизни refreshToken'а еще не истекло. Если refreshToken протух, backend должен отправить ошибку об этом и отправляем пользователя входить через ВК по новой.

Если refreshToken живой, генерируем новую пару accessToken и refreshToken, предварительно затерев старую запись в БД? И далее возвращаем пользователю json с новыми данными (accessToken, refreshToken), сохраняем их в приложении.

Верен ли описанный процесс входа пользователя или где-то всё пошло не по плану и должно быть сделано иначе?
  • Вопрос задан
  • 170 просмотров
Пригласить эксперта
Ответы на вопрос 1
alexgp13
@alexgp13
Руководитель ИТ-проектов
Вроде все верно) Делайте, тестируйте.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы