Лучшие практики (лучше всего для Android): аутентифицировать пользователя с помощью Facebook или входа в Google
Я разрабатываю приложение с возможностью использования Facebook и Google для входа в систему, а также для классического входа в систему электронной почты + пароль. Я задумываюсь о нескольких вещах, касающихся входа в сторонние API:
1.
так как один пользователь может войти в свою учетную запись Facebook, а позже, решив выйти из системы и войти в свою учетную запись Google, пользователь должен быть узнан по его адресу электронной почты. Поэтому всякий раз, когда он подписывается с другой учетной записью, адрес электронной почты просматривается в базе данных, и если он найден, он присоединяет это новое значение к ранее созданной учетной записи. Просто подтвердите этот вопрос, пожалуйста.
2.
Если пользователь подписывается с входом в Facebook, вы можете получить accessToken, userId, электронную почту пользователя и т.д. Какова наилучшая практика для аутентификации пользователя, чтобы он был наиболее безопасным способом? Должен ли я отправлять его facebook accessToken и адрес электронной почты непосредственно на сервер? Если сервер проверяет Facebook, если accessToken действительно существует в Facebook?
Каков наилучший и наиболее безопасный способ создания токена доступа к приложениям на стороне сервера? Я слышал что-то о хеше MD5... Должен ли я использовать только этот вновь созданный токен доступа в вызовах API, а не использовать какие-либо учетные данные в facebook? Или я должен использовать учетные данные Facebook и, таким образом, сохранять их на стороне сервера/клиента?
Я собираюсь использовать Java App-engine для серверной части моего приложения.
3.
Что делать, если пользователь удаляет свою учетную запись на Facebook? Как приложение узнает об этом? Если он все равно знает, что делать с учетной записью?
- Должен ли я регулярно проверять токен доступа на Facebook, если он все еще действителен? Почему и как и как часто?
Я не уверен, спрашиваю ли я в нужном месте. Если я ошибаюсь, пожалуйста, перенаправляйте мне то, как я должен идти, возможно, некоторые ссылки на эти лучшие практики? До сих пор я не нашел ничего, что могло бы ответить на ВСЕ мои вопросы. Думаю, это как кодирование, так и безопасность.
Спасибо за все ваши советы и трюки.
Ответы
Ответ 1
После некоторого чтения и запроса я подошел к этому:
1.
Да, если вы хотите, чтобы ваши пользователи регистрировались со своей учетной записью Facebook или Google, вы вызываете API, получаете адрес электронной почты (это еще проще с Google AccountManager на Android), отправьте его на ваш сервер, который будет экономить адрес электронной почты, связывать идентификатор пользователя и генерировать собственный код доступа. Код доступа будет отправлен обратно в клиентское приложение, чтобы сохранить его для последующего использования. Всякий раз, когда пользователь хочет выполнить некоторые операции, API-интерфейс сервера будет вызываться с адресом электронной почты пользователя и кодом доступа, и вы можете быть уверены, что он действительно является пользователем. Намного сложнее назвать API снаружи и правильно угадать как адрес электронной почты, так и код доступа, чтобы он был несколько безопасным.
2.
Поскольку вход в Facebook используется только для аутентификации пользователя, что означает только проверить, что пользователь существует и имеет учетную запись, нам действительно не нужен FB accessToken. Нам нужен FB accessToken только для вызовов API для Facebook-сервера, поэтому, например, когда мы хотим получить список друзей пользователя и так далее. В этом случае вы можете получить активный сеанс, который предоставляется в SDK для Facebook, и получить оттуда accessToken.
3.
Этот случай снова довольно прост.
Если вы используете только учетную запись Facebook для аутентификации пользователя, вам не нужно, если пользователь удалит свою учетную запись в будущем. После первого входа вы сохраните его адрес электронной почты, возможно, картинку и больше не заботитесь о своем профиле в facebook.
Если вы используете учетную запись Facebook для получения списка друзей и т.д., Вы все равно не храните этот тип данных в своем локальном хранилище, поэтому, как только пользователь удалит свою учетную запись, он потеряет свой список друзей. Или вы можете сохранить его список друзей и попытаться обновить его каждый раз, когда он использует ваше приложение, и как только он удалит свою учетную запись, список друзей перестанет обновляться, и вам снова не нужно использовать учетную запись Facebook. Последняя идея скорее соответствовала бы приложениям приложений для игр... просто идея, а не что-то официально принятое как лучшее.
Ответ 2
Вы можете сделать это несколькими способами и зависит от вас от реализации, вы можете получить свой адрес электронной почты от каждого входа в систему и сохранить его как пользователя в своей базе данных. Затем для любого пользователя, который входит в систему, может пройти через хэш и вернуть его, и проверить, существует ли этот хеш.
Вы также можете войти в систему с помощью службы, а затем заставить их завершить создание пользователя с именем пользователя, паролем электронной почты и т.д. Затем, когда вы пытаетесь войти в систему с помощью дифференциальной службы, вы можете снова пройти регистрацию с помощью я уже имеют кнопку учетной записи, а также ссылку на учетную запись, если вы попытаетесь создать одну и ту же учетную запись дважды.
Сохраните маркеры, связанные с таблицей токенов сторонних пользователей, связанными с пользователем.
Я рекомендую хешировать все личные данные пользователя, дает пользователям больше доверия с вашим приложением
Мне никогда не нравится полагаться на сторонние аккаунты и считаю, что процесс "закончить создание вашей учетной записи" создаст лучшее управление учетными записями. Разрешение пользователям войти в систему как с третьей стороной, так и с именем пользователя и паролем.