Проблем при валидирането на 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 адреса. Или ще получа жетон, или провал. Токенът изглежда се връща добре. Проблемът е в следващата стъпка.

Веднага след получаването на токена се опитвам да го валидирам. Използвам крайната точка "debug", така:

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 за отстраняване на грешки е, ако искате да правите неща < 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