Я использую PHP PHP SDK (v3.2.3, а не v4.0) ( https://developers.facebook.com/docs/reference/php/3.2.3 ) на моем сервере и плагин Phonegap Facebook (мастер ) ( https://github.com/phonegap/phonegap-facebook-plugin ), установленный вручную в приложении Iphone Phonegap v3.3.0.
У меня все хорошо настроено, приложение отображает токен доступа к Facebook и «userID» пользователя, прошедшего проверку подлинности. Проблема в том, что токены Facebook продолжаются всего 2 месяца. Чтобы исправить это, я создал таблицу, в которой размещается каждый токен FB Access, который Facebook предоставил для всех моих пользователей на базе FB. Это отлично работает с кнопкой «Войти в систему» на моем сайте!
… Но поскольку этот плагин Phonegap оставляет устройство посредником между Facebook и моей базой данных, мне нужно, чтобы мой сервер дважды проверял с помощью Facebook, чтобы проверить идентификатор пользователя, а доступный токен, предоставленный пользователем, является подлинным. Я видел, что могу запросить https://graph.facebook.com/app?access_token=TOKEN
или сделать что-то вроде:
GET /debug_token? input_token={input-token}& access_token={access-token}
… и, по-видимому, вернуть все, что мне нужно, но я чувствую, что злоумышленник может просто продолжать использовать мой PHP-скрипт, который проверяет с помощью Facebook снова и снова, пока не находят успех, – тогда у них будут полномочия, необходимые для доступа к моему приложению от имени этого пользователя, чей токен они догадались.
Если идея злоумышленника, предполагающая какой-либо токен доступа к Facebook в течение нескольких недель, смехотворна, сообщите мне. Но я надеялся сузить его и заставить злоумышленника также узнать, какой пользователь они угадывают токен доступа – ТО должно быть почти невозможно взломать. Итак, как я могу проверить пользователя, использующего BOTH токен доступа пользователя и числовой идентификатор пользователя?
Получите пользователей Facebook-идентификатор от Facebook в любое время, когда вы получите токен, и используйте идентификатор пользователя из Facebook, чтобы найти своего пользователя.
Даже если ваше приложение требует автономного доступа, и вы используете сохраненный токен, подтвердите токен перед его использованием.
Если вы не подтвердите токен, ваше приложение может по-прежнему функционировать, если пользователь выходил из Facebook или, возможно, несанкционировал ваше приложение.
$facebook = new Facebook(array( 'appId' => <FACEBOOK_ID>, 'secret' => <FACEBOOK_SECRET>, )); $facebook->setAccessToken($_REQUEST['access_token']); if (($userId = $facebook->getUser())) { // $_REQUEST['access_token'] is valid token for user with id $userId }
Вы не должны беспокоиться о том, что злоумышленник угадывает токен доступа. Ток доступа – 211 символ, состоящий из 62 видов символов (на основе моего токена). Это 62 ^ 211 уникальный токен доступа. В мире всего 7 миллиардов человек, поэтому практически невозможно перебрать маркер доступа. Тем не менее такая атака – это ответственность FB за создание лучшего access_token.
Скажем, токен доступа просочился преступнику: если вы предлагаете сравнить с численным идентификатором пользователя FB – не! Идентификатор доступен с помощью токена доступа. Вместо этого назначьте свой собственный уникальный идентификатор / имя пользователя пользователю, когда они впервые регистрируются или что-то в этом роде.