Проблема с проверкой токена Facebook

Я создаю небольшую библиотеку входа в Facebook для OS X. Это не потому, что там нет SDK, а потому, что мне нужно что-то родное для Cocoa, которое может инкапсулировать процесс входа в систему. Я успешно запросил токен доступа с URL-адреса входа в Facebook. Я использую этот формат строки для входа в систему:

https://www.facebook.com/dialog/oauth?client_id=%@&redirect_uri=%@&response_type=token

Для поля redirect_uri я передаю https://www.facebook.com/connect/login_success.html в соответствии с документацией Facebook. Я беру этот ответ и анализирую URL. Я либо получу жетон, либо провал. Токен, кажется, возвращается нормально. Проблема в следующем шаге.

Сразу же после получения моего токена я пытаюсь его проверить. Я использую конечную точку «отладки», например:

https://graph.facebook.com/debug_token?input_token=%@&access_token=%@

Я передаю свой новый токен как input_token, и здесь он становится липким. Я попытался передать свой клиентский токен, но это вызывает следующую ошибку:

Операция не может быть завершена. (Недопустимый токен доступа OAuth. Ошибка 190.)`

Если я передам свой app ID | app secret, я получу другую ошибку:

Операция не может быть завершена. ((#100) Вы должны предоставить токен доступа к приложению или токен доступа пользователя, который является владельцем или разработчиком ошибки приложения 100.)

Я не знаю, что здесь происходит и что делать. Может кто-то указать мне верное направление?


person Moshe    schedule 30.10.2013    source источник
comment
Привет, ты решил проблему? Я также встречаю ошибку #100 OAuth, когда я передаю свой app ID | app secret.   -  person Kelvin Hu    schedule 27.03.2018
comment
Настоящий ответ здесь: stackoverflow.com/a/37522695/7149454   -  person Nick Kovalsky    schedule 24.02.2019


Ответы (1)


API debug предназначен для тех, кто хочет делать что-то < em>как приложение, а не как пользователь. После того, как пользователь вошел в систему, все, что вам нужно, это его токен доступа, чтобы получить информацию о нем, прочитать его информацию, опубликовать вещи (все, конечно, при условии, что у вас есть токен доступа с разрешениями делать то, что вы пытаетесь сделать). Итак, в вашем случае, теперь, когда у вас есть токен доступа, попробуйте получить информацию о пользователе, используя

https://graph.facebook.com/me?access_token=%@

и вы получите что-то вроде этого:

{
   "id": "542440888",
   "name": "Max Rabin",
   "first_name": "Max",
   "last_name": "Rabin",
   "link": "https://www.facebook.com/MY_USER_NAME",
   "username": "MY_USER_NAME",
   "birthday": "11/22/YEAR",
   "hometown": {
      "id": "110970792260960",
      "name": "Los Angeles, California"
   },
   "location": {
      "id": "110970792260960",
      "name": "Los Angeles, California"
   },
   "bio": "There are 10 kinds of people in this world.\r\n01: Those who know trinary\r\n02: Those who don't\r\n10: Those who confuse it with binary",
   "gender": "male",
   "email": "MY_EMAIL",
   "timezone": 2,
   "locale": "en_US",
   "languages": [
      {
         "id": "106059522759137",
         "name": "English"
      }
   ],
   "verified": true,
   "updated_time": "2013-10-21T10:02:49+0000"
}
person Max    schedule 30.10.2013
comment
Разве это не небольшая угроза безопасности? У кого-то может быть токен доступа пользователя из другого приложения, а затем он может отправить его на наш сервер и войти в систему как другой пользователь. Или я что-то не так понимаю? - person Kamoris; 01.12.2016
comment
Токены клиента Facebook привязаны к приложению. Они не будут работать в другом приложении. - person Augusto Samamé Barrientos; 06.08.2017
comment
Спасибо за разъяснение этого. Другими словами, если я хочу проверить область действия любого токена, я должен сделать запрос и проверить, отклонен он или нет? (Я пытаюсь уловить случай, когда пользователь уменьшает выбранную область по умолчанию и предотвращает сбой моего приложения) - person Pierre Ferry; 14.11.2018
comment
@AugustoSamaméBarrientos Это неправильно. Токены доступа пользователя не привязаны к приложению. Например, для использования маршрута /me требуется только токен доступа пользователя, а не какая-либо информация, связанная с приложением. - person sermonion x; 06.03.2019
comment
@sermonionx, ты путаешь понятия. Когда вы разрешаете своим пользователям регистрироваться для использования вашего приложения, вы, как разработчик приложения, получаете токен пользователя клиента от Facebook. Он однозначно идентифицирует пользователя и разрешения, которые он дал при регистрации в приложении. Однако это только ваше приложение. Его нельзя использовать в других. Это позволит вам вернуть данные по маршруту /me, потому что он ограничен пользователем, но для разрешений, связанных с приложением, он ограничен только вашим приложением. - person Augusto Samamé Barrientos; 09.03.2019