Могу ли я использовать поток аутентификации на стороне сервера Facebook в приложении для iPhone и при этом поддерживать взаимодействие на стороне клиента? - PullRequest
4 голосов
/ 30 сентября 2011

У меня есть веб-сайт, который использует аутентификацию Facebook для входа в систему.Он использует серверный поток oAuth 2.0 для аутентификации и все работает нормально.

Сейчас я занимаюсь разработкой приложения для iPhone для того же сайта и хочу, чтобы пользователи могли входить на сайт через приложение iPhone с помощью FBАутентификация. Facebook iOS SDK предоставляет механизмы для выполнения аутентификации с использованием потока на стороне клиента, где в моем iPhone приложение получает токен доступа.

Теперь, чтобы аутентифицировать пользователя на моем сервере, а также сделать токен доступа доступным для моего сервера, я подумал о том, чтобы отправить этот токен доступа на мой сервер (через https) и аутентифицировать пользователя по моей БДи установить мой собственный cookie, связанный с сеансом.Это предпочтительный или рекомендуемый метод?Мне нужен токен доступа на моем сервере, так как я запрашиваю разрешение на автономный доступ и мое веб-приложение взаимодействует с учетной записью пользователя FB напрямую с моего сервера.

Для меня более простым вариантом будет просто использовать поток на стороне сервера дляаутентификация в моем приложении для iPhone, так как ничего нового не нужно делать, а код на стороне сервера одинаков для веб-сайта или приложения для iPhone.Это возможно?

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

Одно из решений (, приведенное здесь - в первом комментарии к вопросу) - использовать UIWebView и моделировать поток на стороне сервера.В следующем комментарии упоминаются проблемы с этим подходом, которые мне не удалось решить.

Эта проблема была решена путем изучения URL-адреса, на который веб-представление перенаправляется после входа в систему.

Другая проблема заключается в том, что мое приложение для iPhone также выполняет некоторые взаимодействия на стороне клиента (например,FBShare, писать на стене друга и т. Д.).Если я использую смоделированную аутентификацию на стороне сервера, мне придется выполнить другую аутентификацию на стороне клиента для этих взаимодействий или принять болезненный подход и направить даже эти действия через мой сервер.Последнее определенно не является предпочтительным.Как мне это сделать?Можно ли избежать двойного входа в систему, так как это будет очень плохо для пользователя?

Ответы [ 3 ]

0 голосов
/ 14 января 2012

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

Я только что нашел это напротив. Токены доступа, генерируемые потоком на стороне клиента и аутентификацией потока на стороне сервера, в точности совпадают. Они являются «взаимозаменяемыми», фактически, когда вы получаете токен, его можно использовать где угодно, пока пользователь все еще находится в системе и токен еще не истек. Это работает.

curl "https://graph.facebook.com/{the user id}/friends?access_token={the token}
0 голосов
/ 16 февраля 2017

Я не могу использовать аутентификацию на стороне клиента и передать токен доступа на мой сервер для аутентификации на моей системе, а также для сохранения для дальнейшего использования.

За Facebook Защита запросов - проверка вызовов API Graph с помощью appsecret_proof страница:

Жетоны доступа являются переносными. Можно взять токен доступа, сгенерированный на клиенте с помощью SDK Facebook, отправить его на сервер, а затем совершать звонки с этого сервера от имени этого человека.

Несмотря на это, я озадачен тем, что SDK не позволяет использовать 3-сторонний поток OAuth, возвращая код доступа вместо токена, несмотря на их рекомендацию сделать это по соображениям безопасности.

0 голосов
/ 02 января 2012

Я в похожей ситуации. У меня есть собственное приложение для iOS, которое должно знать, кто пользователь.

У меня есть веб-сайт (RoR) с использованием Devise, на котором я могу войти в систему / создать учетную запись через Facebook / Twitter через его драгоценный камень OmniAuth.

Однако в случае Facebook и Twitter мне кажется, что мне нужно создать две записи в каждой, одну для веб-сайта, одну для приложения.

Это отдельные ключи API для каждого.

Для приложения для iOS единственный способ, с помощью которого я придумал эту работу: * Если пользователь хочет авторизоваться / создать учетную запись через Twitter Facebook, отправьте его через UIWebView на веб-сайт для входа в систему.

Любые сообщения твитов / FB с iOS будут фактически отправляться каждому через API на веб-сайте, который будет использовать маркер доступа пользователя для публикации твита от его имени.

Дело в том, что мне не нравятся веб-представления для входа в систему. Если у кого-то есть предложения, я весь слух.

...