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


115

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

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

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

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

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

Обновить:

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


Это круто. Я в такой же ситуации и искал информацию по этой теме. Безопасно ли, что этот токен не нарушает никаких политик платформы FB? Просто прошу убедиться.
onigunn

2
Собственная документация @asrijaal Facebook (взгляните на Сценарий 5) говорит, что эти токены доступа к страницам не имеют срока действия. Я бы сказал, что можно с уверенностью предположить, что они соответствуют политике Facebook.
redhotvengeance

«Я подумал, что было бы хорошо оставить четкий пошаговый процесс» - упаси небеса :) Спасибо @redhotvengeance
Стив МакГилл

У вас есть опечатка с URL-адресом токена доступа к вашей странице. Должен быть? не & после счетов. Некоторое время пытался понять, почему это не работает. : P
Джорен

@Joren Действительно - теперь это исправлено. Спасибо!
redhotvengeance

Ответы:


189

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

Обнаружив, что можно сгенерировать токен доступа к странице 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.


2
Как и где мне сделать шаг 6?
Stefan Müller

5
@ StefanMüller Когда вы нажимаете «Получить токен доступа» на странице Graph API Explorer, появляется диалоговое окно «Выберите разрешения». manage_pagesВариант находится под Extended Permissionsвкладкой.
redhotvengeance

2
Большой! Это работает как шарм, и публикуется как СТРАНИЦА, а не как пользователь.
Benjamin Piette

3
Я считаю, что сейчас это устарело. и вы получаете только токен доступа, срок действия которого истекает примерно через два месяца.
Qaiser Wali

7
Я сделал все это сейчас, и это работает, за исключением того, что долгоживущий идентификатор токена истекает через 2 месяца и не бесконечен. Также отладчик токенов Acces имеет ссылку внизу формы для расширения краткосрочного токена доступа на долгоживущий токен доступа.
SlimIT

15

Это описано в документе об отказе от автономного доступа.

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


5
Вздох. Действительно, похоже, это билет. Я мог бы поклясться, что перепробовал все возможные комбинации этих шагов - видимо, я пропустил тот, который действительно работает. Какой абсолютно запутанный набор необходимых действий. Большое спасибо за вашу помощь!
redhotvengeance

1
В Интернете так много всего, что это действительно работает.
Эрнесто

Есть ли способ получить эти 60 дней с page_access_tokenпомощью кода в javascript? Нравится способ получения user_access_token> FB.getAuthResponse()['accessToken'];Спасибо!
Tulon

4

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

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

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

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

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

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

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

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

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

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

После нескольких часов исследования я наткнулся на следующую статью документации Facebook: Business Login for Direct Business .

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

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

  • Вам нужен аккаунт Бизнес-менеджера .
    • Требуется проверка и подписание цифрового контракта.
  • Вам необходимо добавить в эту учетную запись целевую страницу Facebook.
  • Вам необходимо создать приложение Facebook и перенести это приложение в ту же учетную запись Business Manager.
  • Приложение должно будет пройти процесс проверки Facebook, потому что потребуются следующие разрешения: manage_pagesи publish_pages.
    • Важное примечание Для того, чтобы сообщения, сделанные с использованием токена создания страницы, были видны пользователям, кроме администраторов приложения, это приложение должно быть опубликовано и одобрено.
    • Вы по-прежнему можете экспериментировать с концепцией, не отправляя на рассмотрение, но сообщения не будут общедоступными.
  • В учетной записи Business Manager (только после того, как ваше приложение и страница были добавлены в учетную запись), вам необходимо создать так называемого системного пользователя и предоставить этому пользователю роль администратора (или разрешения) для целевой страницы Facebook.
    • Системный пользователь принадлежит учетной записи Business Manager и не привязан к конкретному пользователю. На данный момент я понимаю, что одним из основных вариантов использования для системного пользователя является программный доступ к Facebook Graph API (как раз то, что нам нужно).
  • Затем для этого пользователя системы вам необходимо сгенерировать токен доступа (срок действия которого не истекает). Вам будет предложено выбрать, для какого приложения. Затем вы выберете свое целевое приложение.
  • Затем вам нужно будет использовать сгенерированный токен приложения для создания токена страницы, который также будет бессрочным. Процедура описана в этой статье как:
GET /<PAGE_ID>?fields=access_token&access_token=<SYSTEM_USER_ACCESS_TOKEN>
  • Вот и все.

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

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

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

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

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

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


1

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

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

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

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

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

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


0

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

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

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.