Аутентификация Facebook на моем сервере с помощью Android - PullRequest
27 голосов
/ 13 октября 2011

Я создаю приложение со следующими блоками:

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

Моя проблема заключается в следующем: я хотел бы аутентифицировать своих пользователей через Facebook (например, запрос, отправленный клиентом Android с помощью facebook-android-sdk на facebook), но затем я хотел бы отправить запросы на мой сервер (который являетсяреализовано сервлетами) и каким-либо образом подтвердить, что пользователь, отправляющий запрос, прошел проверку подлинности на facebook и моем приложении.

Итак, это шаги:

пользователь X аутентифицирован на facebook и моем приложении facebookиспользуя facebook-android-sdk.X отправляет запрос на мой сервер

Что касается сервера, я хотел бы только знать, что это правильный пользователь, который работает со мной, мне не нужен сервер для выполнения каких-либо запросов API Graph.

Как я могу узнать, что X действителен на моем сервере?В этом случае аутентификация была выполнена на стороне клиента.

Ответы [ 2 ]

56 голосов
/ 09 декабря 2011

Итак, у вас есть: Facebook - приложение для Android - ваш веб-сервер. И ваш веб-сервер должен знать, что вы являетесь пользователем Facebook, которого вы представляете. Проблема в том, что вы не можете доверять клиенту Android в отношении любых данных, которые он вам предоставляет.

Я решил проблему следующим образом:

  1. Аутентификация пользователя в Facebook из приложения Android,
  2. Получить токен FB для аутентификации в приложении для Android,
  3. Переслать токен аутентификации и UID facebook с Android на веб-сервер,
  4. Проверьте токен (используя app_id & user_id), используя конечную точку отладки Графика Facebook, как описано здесь (https://developers.facebook.com/docs/facebook-login/manually-build-a-login-flow#checktoken), чтобы убедиться, что токен предназначен для правильного применения
  5. На веб-сервере выполните вызов API Facebook с использованием отправленного токена.

Если вызов API отладочной конечной точки с вашего веб-сервера возвращает действительную информацию (идентификатор приложения и идентификатор пользователя), ваш сервер может доверять этому идентификатору (и вы можете быть уверены, что аутентификация Android реальна)

7 голосов
/ 23 января 2018

Лучший ответ на этот вопрос (включая информацию из комментария tomas.tunkl) следующий:

  1. Аутентификация из приложения Android
  2. Получить токен FB Auth из аутентификации в приложении
  3. Переслать токен и UID fb на веб-сервер
  4. Вызовите конечную точку отладки, как описано здесь (https://developers.facebook.com/docs/facebook-login/access-tokens/debugging-and-error-handling) - это даст вам идентификатор приложения приложения, сгенерировавшего токен. УБЕДИТЕСЬ, что идентификатор приложения - это идентификатор вашего приложения (это означает, что это токен). из вашего мобильного приложения), в противном случае кто-то захватывает ваше приложение, используя токен из другого приложения, и вы пропускаете пользовательские данные (как указывал Томас Тункл с помощью url https://developers.facebook.com/docs/facebook-login/security/#tokenhijacking). Это ПЛОХО. Также проверьте is_valid / expires_at, чтобы сделать убедитесь, что это все еще действительный токен из вашего приложения.

(Поскольку я связал документацию, я также собираюсь добавить сюда немного информации из этой ссылки отладки и обработки ошибок, чтобы показать, как сделать вызов и что вы получите обратно):

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

Чтобы использовать API, вы можете отправить запрос API Graph:

GET /debug_token? input_token={input-token}& access_token={access-token}

input_token: токен доступа, о котором вы хотите получить информацию

access_token: токен доступа к приложению или действительный токен доступа пользователя от разработчика приложения. Ответом на вызов API является массив JSON, содержащий карту полей. Например:

{ "data": { "app_id": 000000000000000, "application": "Social Cafe", "expires_at": 1352419328, "is_valid": true, "issued_at": 1347235328, "scopes": [ "email", "publish_actions" ], "user_id": 1207059 } }

Обратите внимание, что поле assign_at не возвращается для краткосрочных токенов доступа.

Это гарантирует, что у вас есть действительный токен для пользователя Facebook, который был сгенерирован из вашего собственного секретного ключа для пользователя; Это означает, что они заверены правильно.

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