Как правильно организовать авторизацию через социалки в API для web/mobile?
При разработке веб-приложения с API постал вопрос о способе авторизации через социальные сервисы.
Как я делал это раньше: на бекэнде генерировалась ссылка для авторизации, в которую зашивался адрес редиректа, пользователь логинился и его бросало обратно вместе с токеном, которы чекался на принимающем редирект контроллере. Далее я брал этот токен и по нему получал все нужные данные с социалки.
Тепер же, когда появилось API, добавилось мобильное приложение и web front теперь SPA - необходимо переделывать мешанизм авторизации.
Разработчки мобильного приложения хотят получать всю информацию самостоятельно и передавать на апи такой запрос:
POST /api/users
email=demo@demo.com
password=1111111
provider=google
socialId=123123123
Как я понял, даже без токена.
Или же лучше клиенту получить токен и отправить его бекэнду, который сам вытянет нужную и информацию + будет уверен, что пользователь действительно залогинен в социалку.
Прошу мочь хотя-бы ссылкой, которая поможет снять чехлы =)
Спасибо.
тут есть нюансы. Вообще вам по сути токен нужен только если с сервера планируется взаимодействие от имени пользователя (например порыться в друзьях и поискать их среди имеющихся пользователей). Тут важно только получить всю нужную инфу и зарегистрировать пользователя у себя + привязать аккаунт. Если мобильщики будут присылать это добро в таком виде - то и ладно.
На самом деле у такого подхода есть жирный плюс - можно заставлять людей вводить дополнительную инфу. То есть email например нужен почти всегда, но пользователь может отказаться и сторонний ресурс этй инфу не предоставит, и если вы будете запрашивать информацию с сервера вы этот кейс никак не захэндлите нормально, либо у вас может возникнуть ситуация с наполовину зарегистрированными пользователями.
Заставлять людей вводить инфу и так заставляем. И действительно есть штука с полу-зарегистрированными пользователями.
Но вот что подумал: можно же с клиента принимать нужные данные + токен от социалки и регистрировать это одним запросом. Так сервер будет уверен, что это реально наш соцИд, а не подставленный вручную.
Гугл предоставляет такую возможность (клиент получает JWT, в котором лежат все данные с социалки, которые мы запросили).
Можно ли так же сделать с FB и твиттером?