Долговечный токен доступа к FB для сервера для получения информации о странице FB

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

  • Я создаю сайт, который на стороне сервера должен извлекать сообщения / статусы с одной страницы Facebook.
  • Я администратор этой страницы в Facebook
  • Я создал приложение Facebook
  • Используя Facebook Graph API Explorer, я создал кратковременный ключ, связанный с моим приложение и моя учетная запись, которая предоставляет моей учетной записи разрешение на просмотр токенов доступа для моих страниц.
  • Я преобразовал свой краткосрочный ключ в долгоживущий (60 дней), как сценарий 4, из это

И вот где я застрял. Мой 60-дневный ключ отлично работает для моего сервера, чтобы получить необходимую информацию со страницы, но, насколько я могу судить, нет никакого способа программно продлить этот 60-дневный ключ. Я также не знаю, как сгенерировать новый недолговечный ключ, не заходя вручную в Facebook Graph API Explorer и не создавая его.

Поскольку это мой сервер, который выполняет запросы к API Facebook, а не система на основе пользователя (где я мог бы легко запросить, чтобы пользователь снова авторизовал приложение Facebook), это создает очень неуклюжую систему. Поскольку Facebook устарел offline_access, действительно ли нет постоянного способа, чтобы мой сервер извлекал информацию с моей собственной страницы? Действительно ли мне придется создавать новый ключ вручную и вручную обновлять им свой сервер каждые 60 дней?

Или что-то мне не хватает?

Обновление:

Пошаговое руководство, ранее найденное здесь, было перенесено в отдельный ответ.


person redhotvengeance    schedule 28.08.2012    source источник
comment
Это круто. Я в такой же ситуации и искал информацию по этой теме. Безопасно ли, что этот токен не нарушает никаких политик платформы FB? Просто прошу убедиться.   -  person onigunn    schedule 17.09.2012
comment
В собственной документации @asrijaal Facebook (см. Сценарий 5) говорится, что срок действия этих токенов доступа к странице не истекает. Я бы сказал, что можно с уверенностью предположить, что они соблюдают политику Facebook.   -  person redhotvengeance    schedule 17.09.2012
comment
Я подумал, что хорошо бы оставить четкий пошаговый процесс - не дай бог :) Спасибо @redhotvengeance   -  person Steve McGill    schedule 12.04.2013
comment
У вас есть опечатка с URL-адресом токена доступа к вашей странице. Должен быть? не & после счетов. Потратил некоторое время, пытаясь понять, почему это не работает. :П   -  person Joren    schedule 16.04.2013
comment
@Joren Действительно - теперь это исправлено. Спасибо!   -  person redhotvengeance    schedule 16.04.2013
comment
Вам не нужно быть администратором, роль только для чтения, аналитик, тоже может работать. Вам просто нужно дать manage_pages право. Я полагаю, что токен страницы будет разрешать доступ только для чтения, но это все, что мне нужно.   -  person Vlasec    schedule 28.06.2013
comment
Одно предупреждение: срок действия этого токена не истекает, если пользователь не изменит пароль, он станет недействительным.   -  person SomeoneS    schedule 13.11.2013
comment
чем вы столько за это. также- что, черт возьми, facebook   -  person user151496    schedule 20.11.2013
comment
Я предпринял эксперимент по чтению данных из Facebook через Pentaho-Kettle и обнаружил, что некоторые вещи (чтение API) изменились с момента написания этих руководств ... Вот моя коллекция процесса ... Благодаря оригинальному плакату a много ... tech.sraghav.in/2014/02 /   -  person Raghav    schedule 09.02.2014
comment
@redhotvengeance, поскольку ваше «обновление» - это ответ, который действительно работает, не могли бы вы переместить его в ответ ниже, чтобы его можно было проголосовать и принять?   -  person Juan A. Navarro    schedule 19.02.2014
comment
@ JuanA.Navarro Подумав (и снова протестировав шаги, чтобы убедиться, что Facebook ничего не изменил), я согласен. Лучше следовать соглашениям SO, чтобы эти шаги находились в собственном ответе. Я их перенес.   -  person redhotvengeance    schedule 21.02.2014


Ответы (5)


Это шаги, которые ранее были в вопросе - они перенесены в этот ответ.

Обнаружив, что можно сгенерировать токен доступа к странице Facebook, срок действия которого не истекает (с помощью @Igy), вот четкое пошаговое руководство для всех, кто хочет того же:

  1. Убедитесь, что вы являетесь администратором страницы FB, с которой хотите получить информацию.
  2. Создайте приложение FB (должно быть с той же учетной записью, что и администратор страницы)
  3. Перейдите в Facebook Graph API Explorer
  4. В правом верхнем углу выберите созданное вами приложение FB из раскрывающегося списка «Приложение».
  5. Нажмите "Получить токен доступа".
  6. Убедитесь, что вы добавили разрешение manage_pages
  7. Преобразуйте этот недолговечный токен доступа в долгоживущий, выполнив этот вызов API Graph: https://graph.facebook.com/oauth/access_token?client_id=<your FB App ID >&client_secret=<your FB App secret>&grant_type=fb_exchange_token&fb_exchange_token=<your short-lived access token>
  8. Возьмите новый долгоживущий токен доступа, возвращенный обратно
  9. Выполните вызов API Graph, чтобы просмотреть свои учетные записи с использованием нового долговечного токена доступа: https://graph.facebook.com/me/accounts?access_token=<your long-lived access token>
  10. Возьмите access_token для страницы, с которой вы будете получать информацию
  11. Lint токен, чтобы увидеть, что он установлен на Expires: Never!

Это должно сработать. Теперь у вас должен быть токен доступа к странице Facebook, срок действия которого не истекает, если:

  • Вы меняете пароль своей учетной записи Facebook
  • Вы теряете доступ администратора к целевой странице
  • Вы удаляете или деавторизуете свое приложение Facebook

Любой из них приведет к тому, что токен доступа станет недействительным.

Если вы получаете (#100) Tried accessing nonexisting field (accounts) on node type (Page), перейдите в Отладчик токенов доступа, скопируйте значение User ID и используйте его для замены части URL-адреса "я" на шаге 9.

person redhotvengeance    schedule 21.02.2014
comment
Как и где мне сделать шаг 6? - person Stefan Müller; 31.03.2014
comment
@ StefanMüller. Когда вы щелкаете по Get Access Token на странице Graph API Explorer, появляется диалоговое окно Select Permissions. Параметр manage_pages находится на вкладке Extended Permissions. - person redhotvengeance; 31.03.2014
comment
Большой! Это работает как шарм и публикуется как СТРАНИЦА, а не как пользователь. - person Benjamin Piette; 23.04.2014
comment
Спасибо, это очень помогает, чтобы получить доступ к неограниченному сроку действия. - person gaurav; 13.06.2014
comment
Просто предупреждение. У меня уже был долгоживущий токен доступа, и я пытался использовать его с этим кодом, но это не сработало. Следите за каждым шагом - person maxisme; 01.08.2014
comment
Я считаю, что сейчас это устарело. и вы получаете только токен доступа, срок действия которого истекает примерно через два месяца. - person Qaiser Wali; 25.08.2014
comment
@QaiserWali Я только что протестировал процесс, и он все еще работает нормально. Вы уверены, что сделали каждый шаг? У токена на шаге 7 истек срок действия, но для токена, который вы получаете на шаге 9, должен быть установлен постоянный срок действия. - person redhotvengeance; 26.08.2014
comment
Спасибо за ответ. Если я обменяю короткоживущий токен доступа на долгоживущий, будет ли у моего токена доступа все разрешения, которые имел мой короткоживущий токен? - person user2492854; 28.11.2014
comment
он говорит Ошибка проверки секрета клиента. Как мне решить эту проблему - person user2492854; 28.11.2014
comment
Новости в 11! Выполнение всех шагов помогает в достижении указанного результата. Почему люди следуют только некоторым шагам, а потом говорят, что это не работает? - person Christopher Thomas; 29.11.2014
comment
Обратите внимание, что для шага 7 вы не можете использовать Graph API Explorer. Это приведет к ошибке (я предполагаю, что это связано с тем, что ответ не является JSON). Просто вы можете просто перейти по URL-адресу с помощью браузера. Хотел бы я найти ваш ответ раньше, я просто написал свою собственную, более подробную версию неделю назад. - person donut; 17.02.2015
comment
Facebook все испортил, поэтому больше не работает. :-( После шага 6 выше (нажатие кнопки «Получить токен доступа») в следующем диалоговом окне появляется красное предупреждение, в котором говорится «Отправить для проверки входа» - некоторые из приведенных ниже разрешений не были одобрены для использования Facebook, а также замок с текстом Это не позволяет опубликовать приложение в Facebook одновременно с тем, что показано ниже. Поэтому между шагами 6 и 7 выше следует вставить новый шаг: «Сделайте много утомительного дерьма с вашим приложением, затем отправьте его на рассмотрение, а затем» молитесь и ждите. :-( Кто-нибудь знает способ обойти это для чистого тестового приложения? - person QuestionOverflow; 27.07.2015
comment
Я сделал все это сейчас, и это работает, за исключением того, что долгоживущий идентификатор токена истекает через 2 месяца и не бесконечен. Кроме того, Acces Token Debugger имеет ссылку внизу формы для расширения краткосрочный токен доступа к долгоживущему токену доступа. - person SlimIT; 09.10.2015
comment
отлично работает 15/11/2015 единственная сложная часть - 5/6, вам нужно щелкнуть поле, которое открывает диалоговое окно с параметрами - person Luke Robertson; 15.11.2015
comment
это работает для меня (я думаю, вам нужно убедиться, что вы выполняете часть запроса публикации страниц в раскрывающемся списке токенов доступа в Graph, а не отметьте разрешения на шаге 6) .Когда я беру идентификатор токена моей страницы из списка всех моих страниц и прогоняю через ЛИНТЕР, получаю Expires: Never - person Martin Lyne; 18.12.2015
comment
Подсказка для №5 / 6: вам нужно раскрывающееся меню «Приложение», которое находится прямо под раскрывающимся списком «Мои приложения». - person Mark; 06.01.2016
comment
Я предполагаю, что для шага 5 вместо Get Access Token теперь должно быть Get User Access Token? В любом случае, получив мой вечный токен с помощью этого метода, я получаю эту ошибку при попытке опубликовать на моей странице через API: (#200) The user hasn't authorized the application to perform this action. - person Phil Gyford; 26.07.2016
comment
Я решил свою проблему с помощью этого. Начиная с API v2.3, чтобы публиковать сообщения на вашей странице в качестве вашей страницы, вам необходимо включить разрешение publish_pages при получении начального токена доступа. (Документы) - person Phil Gyford; 26.07.2016
comment
Почему этого нет в документации разработчиков facebook? Спасибо тебе большое, чувак - person Kenth John Israel; 18.02.2017
comment
@KenthJohnIsrael теперь включен в документацию facebook: разработчикам. facebook.com/docs/facebook-login/access-tokens/ Расширение токенов доступа к странице [...] Чтобы получить более долгоживущий токен доступа к странице, замените токен доступа пользователя на долгоживущий, как выше, а затем запросите токен доступа к странице. У полученного токена доступа к странице не будет срока действия. - person Athlan; 25.08.2017
comment
Для тех из моих братьев, кто получает токены на 2 месяца, сначала, пожалуйста, поймите концепцию. 1. Токен доступа к странице - ›Токен доступа к странице за 2 месяца -› Ошибка на шаге 9 2. Токен доступа к странице - ›Токен доступа пользователя за 2 месяца -› Получение списка токенов Теперь скопируйте токен доступа к странице, который вы получите в ответ. Это все еще работает по состоянию на ноябрь 2017 г. - person Avinash Agrawal; 11.11.2017
comment
Насколько я понимаю, эта ветка неактивна около двух лет, поэтому я уточняю у пользователей, остается ли это решение актуальным до настоящего времени? Я действительно пробовал шаги, перечисленные выше, и это сработало; то есть у меня есть токен, который позволяет моему приложению программно читать / публиковать на моей странице FB, и когда я смотрю на отладчик токенов, я получаю Expires: Never. Что меня беспокоит, так это поле прямо под ним (в выводе отладчика), в котором написано Data Access Expires: in-3-months. Мне также интересно, может быть, теперь (в 2019 году) есть новый способ реализации этого (законного) варианта использования? - person focorner; 09.11.2019
comment
Как я упоминал в своем предыдущем комментарии, похоже, что доступ к данным истечет примерно через 3 месяца, поэтому решение больше не является жизнеспособным проектом, который не хочет использовать обновления вручную. Поэтому я провел еще немного исследований и нашел лучший способ (при поддержке Facebook) сделать это в 2019 году. См. Мой ответ ниже: stackoverflow. com / a / 58878246/4978732 - person focorner; 15.11.2019

Это описано в документе прекращение поддержки автономного доступа.

Используйте 60-дневный токен для администратора страницы, чтобы получить токен доступа к странице (через /PAGE_ID?fields=access_token или /me/accounts) - токен доступа к странице не будет иметь срока действия

person Igy    schedule 28.08.2012
comment
Вздох. Действительно, похоже, это билет. Я мог бы поклясться, что перепробовал все возможные комбинации этих шагов - очевидно, я пропустил тот, который действительно работает. Какой абсолютно запутанный набор необходимых действий. Большое спасибо за вашу помощь! - person redhotvengeance; 29.08.2012
comment
В Интернете так много всего, что это действительно работает. - person Ernesto; 05.05.2016
comment
Есть ли способ получить эти 60 дней page_access_token с помощью кода в javascript? Нравится способ получения user_access_tokenFB.getAuthResponse()['accessToken']; Спасибо! - person Tulon; 05.08.2020

Подход, который работает в 2019 году

Недавно я пытался добиться чего-то похожего (к варианту использования, описанному в этой ветке), но я хотел убедиться, что соблюдаю текущую политику Facebook, поэтому я провел небольшое исследование и делюсь тем, что нашел.

Мой вариант использования

Итак, как я уже сказал, мой вариант использования очень похож на описанный здесь; то есть:

  • Я делаю некоторую работу для школьного округа.
  • Они используют программный инструмент для управления практически всем, что касается школьного транспорта.
  • Этот инструмент позволяет им отправлять уведомления по электронной почте (подписчикам), когда они публикуют оповещения о задержках автобусов и о закрытии школ.
  • Многие люди в сообществе следят за организацией на своей странице в Facebook, и это единственное место, где они ищут эти предупреждения.
  • Таким образом, сотрудник организации должен вручную публиковать каждое уведомление на странице Facebook (в дополнение к его созданию в транспортном ПО). Более того, эти уведомления в конечном итоге истекают (или просто удаляются до истечения срока их действия), поэтому сотрудник должен вернуться позже, чтобы удалить их вручную.
  • Это небольшая часть времени, поэтому мы пытаемся разработать простую систему, которая периодически опрашивает базу данных программного инструмента на предмет новых (и просроченных) уведомлений и обновляет их (т.е. добавляет и удаляет) на странице Facebook.

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

Принятый ответ

Я выполнил шаги принятого ответа, и он сработал, за исключением того, что, похоже, все изменилось: теперь, даже если срок действия сгенерированного токена страницы не истекает, access to data действительно истекает примерно через 60 дней. Вы также увидите это, если выполните процедуру и проверите токен страницы в FB Token Debugger Tool < / а>.

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

Как это сделать в 2019 году

После нескольких часов исследования я наткнулся на следующую статью документации Facebook: Business Login для прямого бизнеса.

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

Итак, вот шаги и самые важные части:

  • You need a Business Manager account.
    • Verification will be required and a digital contract will have to be signed.
  • Вам необходимо добавить целевую страницу Facebook в эту учетную запись.
  • Вам необходимо создать приложение Facebook и перенести это приложение в ту же учетную запись Business Manager.
  • The app will have to go through Facebook's review process, because the following permissions will be needed: manage_pages and publish_pages.
    • Important note For the posts made using the generate page token to be visible to users other than the application administrators, that app will need to have been published and approved.
    • Вы все равно можете поэкспериментировать с концепцией, не отправляя на рассмотрение, но сообщения не будут общедоступными.
  • In the Business Manager account (only after your app and page have been added to the account), you need to create what's called a System User, and give that user admin role (or permissions) to the target Facebook page.
    • A system user is owned by the Business Manager account, and isn't tied to a specific user. My current understanding is that one major use case for a system user is programmatic access to Facebook's Graph API (just what we need).
  • Затем для этого пользователя системы вам необходимо сгенерировать токен доступа (срок действия которого не истекает). Вам будет предложено выбрать для какого приложения. Затем вы выберете свое целевое приложение.
  • Затем вам нужно будет использовать сгенерированный токен приложения для создания токена страницы, который также будет бессрочным. Процедура описана в этой статье как:
GET /<PAGE_ID>?fields=access_token&access_token=<SYSTEM_USER_ACCESS_TOKEN>
  • Вот и все.

Срок действия этого токена никогда не истечет, и он не будет привязан к конкретному пользователю Facebook, так что это именно то, что нам нужно!

Последняя часть - убедиться, что ваше приложение Facebook одобрено Facebook. Фактически, это самая важная часть, потому что вся процедура бесполезна, если люди не видят наши сообщения.

Я хотел знать наверняка, что могу положиться на описанную выше процедуру, чтобы создать что-то для моего клиента без того, чтобы Facebook отклонил это в конце, поэтому заранее (то есть перед тем, как начать работу над проектом моего клиента), я прошел весь процесс создание страницы, приложения, учетной записи Business Manager и т. д. Я подтвердил свой бизнес. Я отправил свое приложение на проверку. В моем запросе я очень конкретизировал свой вариант использования и подчеркнул, что приложение предназначено для «самостоятельного использования» (т.е. что организация разрабатывает приложение для себя, а не для других пользователей Facebook). Я получил одобрение менее чем за 24 часа.

Еще несколько примечаний о процессе проверки приложения:

  • Мне нужно было выбрать платформу для приложения, поэтому я выбрал веб-сайт.
  • Я должен был указать, почему приложению нужны эти два разрешения и как оно будет их использовать.
  • Я должен был указать, почему рецензент не сможет войти в мое приложение и попробовать его (то есть потому, что приложение будет использоваться рабочим процессом).
  • Для обязательных скринкастов я просто представил ручные операции в терминале с помощью утилиты curl (для генерации токена страницы и публикации сообщений на странице Facebook). Я также показал, как использую Business Manager, чтобы связать системного пользователя со страницей и сгенерировать токен и так далее.
  • Опять же, я очень конкретизировал свой вариант использования, и я думаю, что это помогло.

Надеюсь, эта информация будет полезна людям с похожими вариантами использования.

person focorner    schedule 15.11.2019

Большое спасибо @redhotvengeance за пошаговое руководство.

Спустя какое-то время теперь в документации Facebook четко описано:

https://developers.facebook.com/docs/facebook-login/access-tokens/expiration-and-extension

Расширение токенов доступа к странице

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

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

person Athlan    schedule 25.08.2017

Вы также можете скопировать и вставить из панели управления приложения на Facebook. Шаги:

  1. Перейдите на https://developers.facebook.com.

  2. Выберите свое приложение в правом верхнем углу страницы (рис. Как оно выглядит)

  3. Нажмите на Messenger из вариантов слева (он перейдет к настройке автоматически) (рис. похоже)
  4. Перейдите в раздел «Генерация токенов» на странице. Выберите, для какой страницы вы хотите сгенерировать токен. (рис. как выглядит этот раздел)
  5. Скопируйте и вставьте токен вашей страницы, где бы он вам ни понадобился.

Имейте в виду, что хотя теоретически ваш токен не истечет, он напрямую привязан к той учетной записи facebook, в которую вы вошли. Скажем, вы изменили свой пароль или удалили разрешения между своей учетной записью и приложением, тогда ваш токен больше не будет действителен.

person Heidi    schedule 27.10.2017