Я работаю над двухуровневым приложением, в котором мой сервер представляет собой сервер REST API nodeJs (express), а интерфейс - клиентское приложение Android (а позже и веб-приложение).
Я хотел бы реализовать регистрацию и аутентификацию с помощью учетных записей Google, но я не совсем уверен, какой подход лучше.
Чего я хочу добиться, так это чтобы пользователи могли зарегистрироваться с помощью своей учетной записи Google, чтобы сервер создавал пользователя на основе своих данных профиля Google (электронная почта, имя пользователя). Затем пользователи могут войти в свою учетную запись Google.
(Вход в моем случае означает, что клиентское приложение получит токен JWT с сервера, подписанный электронной почтой и идентификатором пользователя. Затем клиент будет отправлять JWT в качестве токена-носителя в каждом запросе. Поэтому мой сервер не использует сессии.)
Я дошел до того, что могу получить токен доступа OAuth определенного пользователя и использовать его для получения информации профиля из GoogleAPI. (Я планирую сделать это с сервера. Есть ли причина сделать это из клиентского приложения?)
Я могу создать пользователя приложения с этой информацией и сохранить его в базе данных вместе с токеном доступа. На данный момент проблем нет.
В чем я не уверен, так это в том, как аутентифицировать («войти») пользователя позже.
Мои мысли:
Когда пользователи позже открывают клиентское (Android) приложение, они могут иметь или не иметь токен доступа.
Если у них это есть, нет проблем, они могут отправить токен на сервер, и сервер может найти пользователя в базе данных с тем же токеном.
Но если у клиента больше нет токена, он должен получить новый и отправить его на сервер.
В этом случае сервер не найдет пользователя с этим токеном, но снова запросит информацию о профиле из API Google. Затем, используя информацию профиля, он может искать пользователя с тем же адресом электронной почты.
Это должно сработать, но так ли это правильно?