Как сделать аутентификацию в мобильном приложении через соц. сети?
Есть приложение на ios, android. В приложении есть баллы.
Нужно сделать аутентификацию через фейсбук, гугл и если пользователь вошел, то баллы должны на разных девайсах синхронизироваться.
Схема примерно такая:
1. При логине через фейсбук, гугл - возвращается access token.
2. После успешного логина. Клиент отправляет запрос на бекенд (id device, access token, provider (соц. сеть))
3. Бекенд смотрит есть ли уже такой юзер, если нет, то создает и возвращает uuid (свой)
4. Клиент сохраняет uuid у себя и при следующем входе отправляет на сервер uuid
При логауте uuid на клиенте удаляется
При логине через другую соц сеть заменяется
Правильно ли составлена логика?
Что возвращается клиенту после логина через соц. сеть? Нужно ли хранить на сервере access токен который вернется?
непонятно зачем вам делать свой uuid, если вы можете посмотреть "есть ли такой юзер" без него? отправляйте с клиента всегда access_token, это проще всего. Разве что вам надо хранить сессию на клиенте даже если он сделал logout из соцсети и потерял access_token.
Что возвращается клиенту после логина через соц. сеть?
Самый распространенный вариант - запрашивать имейл пользователя и дальше уже работать с ним.
Нужно ли хранить на сервере access токен который вернется?
Собственно access_token нужно хранить на сервере для проверки выходит.
не нужно, да и он может прокиснуть-поменяться в любой момент, что вы будете делать? это не то же самое что и пароль. почитайте как работает oauth.
uuid просто чтобы не хранить access_token и потом может понадобиться для связывания юзера с чем-нибудь
После того как пользователь разлогинился, у него удалился uuid, потом он залогинился заново, вы дали ему новый uuid - это будет два разных пользователя? или если вы можете понять что это один и тот же пользователь, и какой именно без uuid - то вопрос - зачем вам uuid.
Вообще возьмите любой пример авторизации через соцсети, можете даже с документации самих соцсетей, как следует разберитесь как оно работает, сделайте как предлагают и изобретайте велосипед только если поймете в чем именно проблема в том что у вас есть и убедитесь что стандартными средствами это не решается.
Изобретать решения выдуманных проблем заранее - так себе подход.
Давайте упростим задачу.
Итак нужно авторизовать пользователя посредством соц. сетей.
Идеальным вариантом будет использовать провайдера OIDC или SAML для аппроксимирования авторизации пользователей. Это сократит время на разработку.
Такие провайдеры предоставляют максимальное количество используемый соц. сетей (не уверен, что Gmail и GitHub можно считать соц сетями, но то такое ... субъективное мнение), но различаются реализацией.
Все что вам нужно выбрать одного из таких провайдеров на этапе r&d.
Далее субъективно:
Для "не русских" финтех проектов рекомендую - AWS Cognito. Из коробки соответсвует нескольким пунктам PCI DSS при весьма гуманной стоимости за MAU.
Очень не рекомендую гугловые сервисы. Сливают аудиторию и все rtb–шным сеткам и мордокниге. Но если аудитория не важна - берите. Проще подключать.
P.S. Если возникнут дополнительные вопросы. В профиле есть моя телега. Пишите - отвечу.