#iphone #web-services #authentication #rest #facebook
#iPhone #веб-сервисы #аутентификация #остальное #Facebook
Вопрос:
Я разрабатываю приложение для iOS, которое использует аутентификацию Facebook для входа пользователя в приложение, затем приложение взаимодействует с веб-службой Python REST.
Какую стратегию мне следует использовать для аутентификации вызова веб-службы после того, как пользователь вошел в приложение, используя свои учетные данные Facebook?
Комментарии:
1. у вас есть веб-служба Python REST?
2. Да, я должен уточнить, я хочу, чтобы мои пользователи входили в приложение с помощью аутентификации Facebook, а затем сохраняли / извлекали некоторые данные, связанные с их учетной записью, в моей базе данных с помощью службы REST.
Ответ №1:
Отправьте токен аутентификации в свою веб-службу REST и позвольте веб-службе REST проверить его с помощью fb (facebook).
- После того, как пользователь вошел в приложение, вы получаете токен аутентификации.
- Отправьте токен и идентификатор пользователя fb в веб-службу REST.
- Ваш веб-сервис должен проверить, что токен действителен (для этого требуется вызов 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; }
- Если он действителен, вы возвращаете пользователя.
- Проверьте идентификатор пользователя (из fb и из сообщения на шаге 2). Если это то же самое, у вас есть аутентифицированный пользователь.
- Сохраните токен аутентификации и временную метку в локальной базе данных на вашем сервере, чтобы вам не приходилось звонить в 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:
Рабочий процесс, который я бы взял:
- Аутентифицировать пользователя с помощью facebook
- Извлечение токена доступа из facebook
- Передайте токен аутентификации facebook обратно веб-службе
- Получить информацию о пользователе Facebook с помощью токена доступа, т.Е. идентификатора пользователя facebook, электронной почты и т. Д.
- Проверьте данные пользователя в локальной базе данных пользователя
- если пользователь существует, войдите в систему со стороны сервера (или рассматривайте пользователя как вошедшего в систему пользователя)
- если это новый пользователь, зарегистрируйте пользователя и войдите в систему
- сделайте 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
префиксом fb.
ID
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 /