Как "Facebook Connect", "Войти в Twitter" и т.д. Работают технологически?

Мне любопытно, как эти системы работают технологически. Насколько я понимаю, вы выполняете следующие действия в качестве пользователя:

  • Перейдите на ваш любимый сторонний сайт.
  • Нажмите кнопку "Facebook Connect".
  • Войдите в Facebook (если еще не).
  • Авторизованное приложение
  • Вы перенаправляетесь на сайт третьей стороны, зарегистрированный.

Но, как сторонний сайт говорит с FB о том, кто вы? Я могу понять, как он может получить необходимую информацию, когда вы сначала авторизуете приложение, но как он узнает впоследствии? Вот сценарий:

  • Вы заходите на Facebook и входите в систему.
  • Затем вы перейдете на ваш любимый сторонний сайт (который уже разрешен).
  • Он уже знает, что вы вошли в систему!

Ответы

Ответ 1

Выполняется фоновый пинг с использованием IFrame, и если уже подписанная учетная запись уже разрешила приложение, то токен доступа и идентификатор пользователя возвращаются в приложение. При этом приложение может решить, что делать (обычно, устанавливать cookie и обновлять страницу, чтобы сервер мог повторно отобразить страницу, зная, кто вы на основе только что установленного файла cookie). Если вам интересно, вы можете посмотреть реализацию на Facebook метода JS на стороне клиента, называемого FB.getLoginStatus() здесь: http://github.com/facebook/connect-js/blob/master/src/core/auth.js#L117

Ответ 2

Он использует трехстороннюю систему аутентификации под названием OAuth.

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

После авторизации он получит auth_token, который он может использовать для доступа к информации из вашей учетной записи, если вы не отменили ее.

Ответ 4

Все происходит через механизм OAuth2, где стороннее приложение уже регистрируется в facebook (или на любом другом сайте с реализацией oAuth2) и получает идентификатор (обычно называемый clientId) и secretCode (т.е. clientSecret). Итак, когда вы хотите войти в приложение третьей части через fb, служба предоставляет (clientId + clientSecret + callbackUrl) --- > в facebook.while, первые два должны были разрешить службу третьей части и обратный вызов. URl - это URL, где facebook отвечает обратно "accessToken" для этой учетной записи. Используя этот accessToken, служба третьей части вызовет facebook graph api, чтобы получить информацию, связанную с пользователем, и использовать их для входа пользователя в свою службу.