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

#iphone #web-services #authentication #rest #facebook

#iPhone #веб-сервисы #аутентификация #остальное #Facebook

Вопрос:

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

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

Комментарии:

1. у вас есть веб-служба Python REST?

2. Да, я должен уточнить, я хочу, чтобы мои пользователи входили в приложение с помощью аутентификации Facebook, а затем сохраняли / извлекали некоторые данные, связанные с их учетной записью, в моей базе данных с помощью службы REST.

Ответ №1:

Отправьте токен аутентификации в свою веб-службу 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 снова и снова. Когда пользователь повторно входит в систему, вы можете проверить токен аутентификации и время (действительное только для x часов) и предоставить разрешение, не проверяя токен с помощью 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

Комментарии:

1. Это отличный ответ, который я искал. Может быть, вы знаете, возможно ли что-то подобное (проверка подлинности с использованием ../me?access_token=xxx ) с помощью Google / OpenID?

Ответ №2:

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

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

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

Комментарии:

1. Это отличный ответ, который я искал. Может быть, вы знаете, возможно ли что-то подобное (проверка подлинности с использованием ../me?access_token=xxx ) с помощью Google / OpenID?

2. Я так думаю, этот рабочий процесс должен применяться к аналогичной аутентификации на основе токенов.

Ответ №3:

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

Вот официальная документация 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 образец в каталоге samples в SDK
  • Создайте новое приложение здесь: https://developers.facebook.com/apps / и запишите app ID
  • Запустите новый проект Xcode и:

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

Добавьте пакет ресурсов Facebook SDK для iOS, перетащив FacebookSDKResources.bundle файл из FacebookSDK.framework/Resources папки в Frameworks раздел вашего Project Navigator .

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

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

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

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

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

Извлечение пользовательских данных

После аутентификации пользователя, т.Е. После activeSession открытия on 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-адрес профиля Open Graph
  • Имя — имя профиля
  • Фамилия — фамилия профиля
  • Имя пользователя — имя пользователя профиля, если применимо
  • Пол — мужской или женский
  • Идентификатор профиля — идентификатор пользователя Facebook

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

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

Ответ №4:

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

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

Ответ №5:

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

Ответ №6:

Вам необходимо использовать api реализации Facebook OAuth.

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

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

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

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