2

Я пытаюсь зарегистрировать пользователя в своем веб-приложении, используя функцию входа в систему Facebook, используя Javascript, а затем передаю информацию пользователя на серверную часть приложения, теперь мне нужно сохранить информацию, чтобы позднее я мог войти в систему, так как этот пользователь но это должно быть сделано без пароля, что я должен сохранить в db моего приложения вместо пароля, чтобы аутентифицировать пользователя, действительно ли он утверждает, что он есть, а не кто-то еще, кто пытается обойти мою безопасность? Первой мыслью было сохранить идентификатор пользователя Facebook для аутентификации пользователя, но он вообще не звучит безопасно, это хорошая идея или плохой? Есть ли еще один, кто выполняет то, что мне нужно?Как я могу идентифицировать пользователя, зарегистрированного с использованием Facebook?

ответ

3

Я бы рекомендовал следующие примеры использования OAuth для Facebook на developers.facebook.com.

Прошло некоторое время с тех пор, как я сделал какую-либо работу OAuth, но из того, что я помню, Facebook выполняет обратный вызов на ваш сервер, который вы укажете. Когда Facebook вызывает этот обратный вызов, они предоставляют вам токен доступа. Затем вы можете использовать этот токен доступа для получения информации о пользователе (например, электронной почты, имени, фамилии).

Это зависит от вас, чтобы определить, что делать, когда вызывается этот обратный вызов. Возможно, вы получите электронное письмо пользователя, имя и фамилию и автоматически создаете учетную запись пользователя на своем конце, если она не существует. Если вы нашли подходящую учетную запись (возможно, по электронной почте), просто зарегистрируйте ее (не нужно хранить пароль для пользователя). Я не думаю, что с этим подходом есть что-то, что действительно беспокоит, потому что Facebook предоставляет уникальный токен доступа, который похож на пользователя, а затем ваш сервер извлекает электронное письмо на основе этого токена доступа. Единственный способ, которым кто-то может взломать это, - это то, что у них есть токен доступа для пользователя, что не так просто (при условии использования SSL).

Чтобы определить, кто-то создал учетную запись с использованием Facebook или другого подхода, я бы создал столбец под вашей «пользовательской» таблицей, которая указывает эту информацию.

+0

Hi Brian благодарит за ваш ответ, я согласен со всем, что вы сказали, но мне все еще не ясно, я не могу сохранить в своем db токен доступа к пользователю Facebook, потому что он меняется каждый раз, когда я перехожу на Facebook, поэтому единственный постоянный параметр, который я получаю от моего запроса от Facebook, - это идентификатор пользователя Facebook, но я бы не хотел, чтобы мой пользователь использовал идентификатор пользователя (давайте вспомним, что это вместо пароля), я не уверен, что пользовательский идентификатор Facebook достаточно безопасен, поэтому я мог бы доверять ему, потому что, если кто-то смог обнаружить идентификатор пользователя, мои пользователи приложения будут воинственными. –

+0

Да, вы не хотите хранить токен доступа в базе данных. Вам нужен способ однозначно идентифицировать пользователя, возможно, его электронную почту, или, как вы сказали, их идентификатор пользователя Facebook. Я бы не стал легко извлекать идентификатор пользователя, но вы всегда должны архивировать приложение, чтобы оно было еще безопасным, даже если обнаружены уникальные идентификаторы. –

+0

Вопрос в том, что Facebook защищает его идентификатор пользователя, поэтому я могу положиться на него? Если Facebook обнаруживает идентификатор пользователя так или иначе, я ввернута. –

0

Мне просто нужно было провести некоторое исследование самостоятельно, потому что я внедрил вход в Facebook с помощью Javascript SDK.
По Graph API 2.0, вы больше не будете получать основной идентификатор пользователя, но a scoped id which is unique per app:

Facebook начнет выдавать идентификаторы пользователей приложений в области видимости, когда люди сначала войти в экземпляр вашего приложение закодировано против версии 2.0 API. С идентификаторами приложения, идентификатор для того же пользователя будет отличаться от приложений.

Пожалуйста, обратите внимание, что это для обратной совместимости: Если вы получили пользователи через Graph API < 2,0, то они до сих пор основной идентификатор.

С точки зрения безопасности все изменилось, поэтому незначительно, поскольку идентификатор с областью видимости, по-видимому, недоступен от посторонних. Это контрастирует с основным идентификатором Facebook, который является общедоступным для всех.

Это, как говорится, я по-прежнему не рекомендую использовать этот новый идентификатор области действия в качестве замены пароля.

  1. Facebook не дает информации о том, действительно ли это случайный идентификатор. Возможно, они используют некоторый шаблон для генерации, который может быть использован хакером.
  2. Facebook говорит нигде, что этот идентификатор является секретным. Вполне вероятно, что открытый вызов API Graph возвращает список идентификаторов пользователя с идентификатором.
  3. Даже если идентификатор уникален и секретен, вы по-прежнему сохраняете его как обычный текст в своей базе данных, а это означает, что все, у кого есть доступ к db, могут украсть личность пользователя. Сравните это с засоленным паролем.
+0

Независимо от того, является ли идентификатор последовательным, скрытым, общедоступным и т. Д., Не имеет значения. Важно то, как вы его получите. Если вы доверяете пользователю отправлять свой идентификатор, то нет, это абсолютно небезопасно. Однако, если пользователь предоставлен Facebook напрямую или вы его получите, обменянный токеном доступа (который вам нужен), то использование этого идентификатора является вполне допустимым способом идентификации пользователя. – Nepoxx