"Войти через Facebook" + пользовательский API - для приложения iOS
Допустим, у меня есть приложение для iOS, которое использует собственный REST API для таких вещей, как управление учетными записями (регистрация, вход в систему, сброс пароля, получение / установка данных, связанных с пользователем).
Допустим, я хотел бы добавить кнопку "Войти / зарегистрироваться через Facebook", чтобы нашему пользователю не пришлось заполнять скучную регистрационную форму.
Моя база данных по-прежнему будет содержать этих пользователей, но у них не будет имени пользователя / пароля-хэша / адреса электронной почты, они будут связаны только с "идентификатором пользователя Facebook", возвращенным SDK Facebook iOS после входа в Facebook через приложение.
Так что мой API будет иметь такой вызов:
http://www.myapi.com/create_user_with_facebook?facebook_user_id=XXXXX
(Хорошо, не совсем, это не будет GET и т. Д., Но вы меня поняли)
Что меня здесь беспокоит, так это то, что любой сможет вызвать этот API и создать учетную запись такого рода с любым общедоступным идентификатором пользователя Facebook, даже если он не принадлежит им. Никакие данные не будут в опасности или что-то в этом роде, но когда законный владелец этой учетной записи Facebook попытается использовать приложение, приложение скажет: "НЕТ, извините, эта учетная запись Facebook, похоже, уже связана с существующей учетной записью приложения!"
Я понятия не имею, как защитить нашу платформу от такого рода "атак".
(API по-прежнему позволяет регистрировать учетную запись традиционным способом или синхронизировать существующую учетную запись с учетной записью Facebook - как это часто случается во многих приложениях в наши дни)
Любая помощь о том, какое направление я должен предпринять для решения этой проблемы, будет принята с благодарностью! Большое спасибо.
2 ответа
Любой может сделать то же самое с чьим-либо адресом электронной почты, если у него есть доступ к вашему API (т. Е. Я могу позвонить вашему API с чужим адресом электронной почты и создать новую учетную запись). Так что это не проблема "Facebook". Решение состоит в том, чтобы защитить ваш API, если вы не хотите, чтобы случайные люди обращались к нему прямо за пределами вашего приложения.
В таком случае вы можете отправить токен доступа, который ваше приложение получит после успешного входа на Facebook, в свой пользовательский API. Затем API вызовет Facebook, используя следующий URL, чтобы получить emailId пользователя -
https://graph.facebook.com/v2.2/me?fields=email&access_token=ACCESS_TOKEN
Ваш API затем проверит, находится ли электронная почта в вашей пользовательской таблице или нет. Если он затем отправит сообщение об успешном входе в приложение или если его там нет, вы можете либо создать новую запись и позволить пользователю зарегистрироваться, либо просто отправить сообщение об ошибке.