Безопасная связь между клиентом iOS, API Facebook и сервером

Я хотел бы реализовать приложение iOS с входом в Facebook. Я хотел бы, чтобы пользователи моего приложения могли взаимодействовать со своим социальным графиком (т.е. Отправлять в свой поток). Для этой цели я бы использовал SDK для iOS для Facebook.
Когда пользователи уже прошли аутентификацию с помощью Facebook, они также должны иметь возможность использовать некоторые службы на стороне сервера моего приложения. Как я могу проверить пользователя на услуги на моем сервере?

В моем приложении iOS я могу запросить токен доступа (для моего приложения Facebook) с помощью iOS Facebook SDK. Должен ли я отправлять этот токен доступа вместе с идентификатором пользователя facebook на мой сервер? Может ли сервер проверить, действителен ли токен доступа? Или должно ли мое приложение iOS общаться с API Facebook? Может ли сервер отправляться на мою стену Facebook, или это должно быть сделано исключительно через приложение iOS?

Ответы

Ответ 1

UPDATE:

В Facebook теперь представлена ​​документация/контрольный список безопасности: https://developers.facebook.com/docs/facebook-login/security/


У вас есть как минимум два варианта:

  • Отправляйте токен доступа на свой сервер и обрабатывайте все запросы в Facebook используя этот токен (если токен недействителен, вы получаете ошибку и просто передать его клиенту). = > Безопасно, но (немного) сложно.

  • Отделите связь между

    • ваш клиент (приложение iOS) и API Facebook и
    • ваш клиент и ваш сервер.

    Ваше приложение будет обрабатывать все запросы API Facebook через SDK Facebook iOS, а затем передавать полученные данные, например, всем типам идентификаторов Facebook, на ваш Сервер. Такой подход абсолютно небезопасен без какого-либо шифрования; вы можете отправить некоторую криптографическую хэш-функцию на свой сервер и проверить ее с помощью ключа, хранящегося на вашем сервере и в приложении iOS. = > Этот метод (немного) проще реализовать, но менее безопасен, поскольку ключ может быть украден с помощью обратной инженерии. Кроме того, вам нужно будет проверить флажок "Я использую шифрование" при отправке приложения в хранилище приложений.

На самом деле это зависит от того, какой риск вы хотите предпринять, какие запросы вы делаете, какие у вас есть услуги и т.д.

Может ли сервер проверить, действителен ли токен доступа?

Да, посмотрите здесь: Проверка доступа к токену на стороне доступа к Facebook для iPhone