Как аутентифицировать вызов веб-службы, которая использует Facebook для аутентификации пользователей? - PullRequest
3 голосов
/ 30 октября 2011

Я разрабатываю приложение для iOS, которое использует аутентификацию Facebook для входа пользователя в приложение, затем приложение взаимодействует с веб-службой Python REST.

Какую стратегию мне следует использовать для аутентификации вызова веб-службы, когда пользователь вошел в приложение, используя свои учетные данные Facebook?

Ответы [ 6 ]

6 голосов
/ 01 февраля 2013

Отправьте токен авторизации на ваш веб-сервис REST и дайте веб-сервису REST проверить его с помощью fb (facebook).

  1. После входа пользователя в приложение вы получаете токен аутентификации.

  2. Отправьте токен и идентификатор пользователя fb на ваш веб-сервис REST.

  3. Ваш веб-сервис должен проверить, что токен действителен (это включает в себя API-вызов сервера fb).

    Я использовал php и этот код, но python должен выглядеть примерно так же.

    function checkFacebookLogin($acces_token) {
        $url = "https://graph.facebook.com/me?access_token=" . strip_tags($acces_token);
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_TIMEOUT, 5);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        $response = curl_exec($ch);
        curl_close($ch);
        $user = json_decode($response);
        return $user;
    }
    
  4. Если он действителен, вы возвращаете пользователя.

  5. Проверьте идентификаторы пользователя (из fb и из поста в шаге 2). Если это то же самое, у вас есть аутентифицированный пользователь.

  6. Сохраните маркер аутентификации и отметку времени в локальной базе данных на своем сервере, чтобы вам не приходилось снова и снова звонить в Facebook. Когда пользователь снова войдет в систему, вы сможете проверить токен аутентификации и время (действительно только для х часов) и предоставить разрешение без проверки токена с помощью facebook. Имейте в виду, что пользователь может отозвать разрешения fb между прочим.

Удачи.

Обновление для прокомментированного вопроса:

Конечно, проверьте проверку токена из документации разработчика Google. Он написан для (как javascript) клиентского приложения, но это не имеет значения. Вы можете просто вызвать URL с помощью php или python.

В конце вы будете называть что-то вроде:

https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=##ADD_TOKEN_HERE##

Вы также можете прочитать эти 2 документа от Google о входе в систему с помощью Google из установленного приложения и о работе с Google с веб-сервера.

https://developers.google.com/accounts/docs/OAuth2InstalledApp https://developers.google.com/accounts/docs/OAuth2WebServer

3 голосов
/ 04 февраля 2013

Рабочий процесс, который я бы выбрал:

  1. Аутентификация пользователя с помощью Facebook
  2. Получение токена доступа с Facebook
  3. Передача токена аутентификации facebook обратно веб-сервису
  4. Получение информации о пользователе Facebook по токену доступа, т. Е. Идентификатору пользователя Facebook, электронной почте и т. Д.
  5. Проверка данных пользователя с вашим локальным пользователем db
  6. , если пользователь существует, войдите в систему с сервера (или обрабатывать пользователя как зарегистрированного пользователя)
  7. , если это новый пользователь, зарегистрировать пользователя и войти в систему в
  8. do rest ...

По сути этоочень похожий подход, как Facebook API.У вас всегда будет заполнение маркера доступа (строка запроса) в конце вашего URL.Хорошо, что вам больше не нужно беспокоиться об истечении срока действия маркера доступа.

1 голос
/ 01 февраля 2013

Аутентификация пользователя

Вот официальная документация Facebook о том, как аутентифицировать пользователей с помощью Facebook SDK на платформе iOS: https://developers.facebook.com/docs/tutorials/ios-sdk-tutorial/authenticate/

Вот ссылка наОфициальный xcode пример Facebook на GitHub, который позволяет аутентифицировать пользователей с помощью объекта FBSession: https://github.com/facebook/facebook-ios-sdk/tree/master/samples/SessionLoginSample. Этот код будет работать на iPhone OS 4.0 or later.

Для того, чтобы начать работу с этим кодомПример, вам нужно пройти через , выполнив шесть шагов , чтобы начать использовать Facebook SDK:

  • Установка Xcode 4.5
  • Установите Facebook SDK для iOS или через Git: git clone git@github.com:facebook/facebook-ios-sdk.git FacebookSDK
  • Найдите образец SessionLoginSample в каталоге примеров в SDK
  • Создайте новое приложение здесь:https://developers.facebook.com/apps/ и запишите app ID
  • Запустите новый проект Xcode и:

Добавьте Facebook SDK для iOS Framework, перетащив FacebookSDK.framework папка из папки установки SDK в раздел Frameworks вашего Project Navigator.

Add thПакет ресурсов Facebook SDK для iOS путем перетаскивания файла FacebookSDKResources.bundle из папки FacebookSDK.framework/Resources в раздел Frameworks вашего Project Navigator.

Далее необходимо добавить библиотеку SQL ''-lsqlite3.0'' всписок зависимостей сборки на панели настроек сборки

  • Добавьте в свой app ID в следующих местах:

Вам необходимо разместитьИдентификатор приложения Facebook в двух местах в главном файле .plist вашего приложения.Создайте ключ с именем FacebookAppID со строковым значением и добавьте в него идентификатор приложения.

Кроме того, создайте ключ массива, называемый типами URL, с одним подэлементом массива, который называется Схемы URL.Дайте ему один элемент с вашим app ID с префиксом fb.

Шесть подробных шагов , которые вы найдете здесь: https://developers.facebook.com/docs/getting-started/facebook-sdk-for-ios/3.1/

Получение данных пользователя

После того, как пользователь прошел аутентификацию, т. Е. После открытия activeSession в FBSession, вам нужно использовать объект Facebook SDK FBRequest, чтобы получить информацию о пользователе в виде объекта FBGraphUser, который выможете отправить на ваш веб-сервис Python REST.Официальное руководство для этого здесь: https://developers.facebook.com/docs/tutorials/ios-sdk-tutorial/personalize/ и соответствующий пример кода ProfilePictureSample, найденный здесь: https://github.com/facebook/facebook-ios-sdk/tree/master/samples/ProfilePictureSample

Объект FBGraphUser имеет только ограниченный набор данных может возвращать, а именно:

  • Заголовок - Имя профиля
  • Описание - Описание объекта профиля
  • Изображение - Массив изображений
  • URL - Открыть график URL профиля
  • Имя - Имя профиля
  • Фамилия - Фамилия профиля
  • Имя пользователя - Имя пользователя профиля, если применимо
  • Пол - мужской или женский
  • Идентификатор профиля - идентификатор пользователя Facebook

Полный список данных объекта Open Graph находится здесь: https://developers.facebook.com/docs/technical-guides/opengraph/built-in-objects/#external_profile

Любые вопросы, пожалуйста, не стесняйтесь оставлять комментарии.

0 голосов
/ 01 февраля 2013

Вам нужно использовать Facebook oAuth реализовать API.

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

Используя этот токен, вы активируете сервис входа в Facebook.

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

Например, вы можете воспользоваться примером сервиса Twitter на основе oauth.http://shakthydoss.com/open-authentication-oauth-with-twitter/

0 голосов
/ 31 января 2013

oAuth2.0, версия oAuth для Facebook - ваша лучшая ставка. Graph API от Facebook имеет единственную поддержку, и поэтому будет проще и / или безопаснее, чем использование другого обходного пути. Включенный статус oAuth2.0 с основополагающим API Graph для Facebook оставляет меня за рекомендацией, что oAuth2.0 - ваш лучший выбор.

0 голосов
/ 05 ноября 2011

Вам все еще нужно предоставить отдельное решение для аутентификации для вашей службы REST, если вы позволите людям делать CUD (создавать, обновлять, удалять) на ваших собственных данных вместо просто R (чтение).

Говоря об этом, чтобы следовать стандартному или большему количеству трендов, лучше использовать oAuth 1.0 (Twitter) или 2.0 (Facebook).oAuth 1.0 немного сложен, но oAuth 2.0 требует SSL.У Amazon AWS есть свой подход к решению проблемы аутентификации, вы можете немного его изучить, чтобы понять, хотите ли вы этого.Но в целом, если ваш REST-сервис предназначен для сторонних разработчиков, лучше придерживаться стандарта.

...