Авторизация facebook соединяет пользователей с другими третьими лицами - PullRequest
2 голосов
/ 18 мая 2010

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

Есть ли способ, который не нарушает TOS Facebook для авторизации других третьих лиц, использующих учетные данные Facebook для аутентификации? Например, если на другом сайте реализовано подключение через Facebook и он передает нам данные сеанса? Есть ли примеры того, что в Facebook можно успешно использовать API-соединение, отличное от таких сайтов, как Foursquare, которые используют oAuth в качестве решения?

1 Ответ

4 голосов
/ 27 января 2011

Я разработал такую ​​функцию для своего приложения. Пользователь может войти через Facebook или Twitter на нашем веб-сайте, и они также могут аутентифицировать себя в нашем API из приложения iPhone / Android.

Я не уверен, что мой метод лучший, поэтому я задал вопрос о том, что может быть лучшим подходом. Тем не менее, я собираюсь объяснить, что я делаю, и пока это работает очень хорошо.

Во-первых, вам нужно реализовать метод login в вашем API. Этот метод обменивает ваши учетные данные на токен API, который затем будет использоваться для всех будущих вызовов.

Вот API-вызов login с вашими основными параметрами аутентификации:

http://login:password@api.myapp.com/login

(это просто представление, объясняющее, что вы отправляете учетные данные, а не фактический способ сделать это)

В ответ этот вызов API отправляет вам api_token

{ "api_token": "xxxx-xxxx-xxxx-xxxx" }

На стороне сервера, у вас есть таблица, связывающая api_token и user_id (а также срок действия, если необходимо, и т. Д.)

Затем вы будете использовать api_token каждый раз, когда вам нужно будет выполнить аутентифицированный вызов:

http://api.myapp.com/request?api_token=xxxx-xxxx-xxxx-xxxx

Теперь, когда вы изменили реализацию аутентификации, вы будете делать то же самое с Facebook access_token, отправленным обратно SDK Facebook Connect. Вы обмениваетесь токенами, используя следующий вызов API:

http://api.myapp.com/login/facebook?access_token=<facebook_access_token>

На стороне сервера, вы проверяете действительность access_token с помощью простого

wget -qO- https://graph.facebook.com/me?access_token=<facebook_access_token>

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

Проблема в том, что если пользователь отклонит ваше приложение из Facebook, это не повлияет на api_token и пользователь все равно будет иметь доступ к API. Могут также быть некоторые проблемы с безопасностью (https, безусловно, будет лучше защитить маркер доступа пользователя к Facebook).

Я не могу ручаться за красоту этого метода, но он работает и может использоваться со многими другими поставщиками. Поскольку маркер доступа Facebook находится в той же экосистеме, я уверен, что это не нарушает TOS Facebook. Я ничего не читал, глядя на это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...