Langlebiges FB-Zugriffstoken für den Server zum Abrufen von FB-Seiteninformationen

114

Ich bin mir bewusst, dass es viele Fragen zu Facebook-Zugriffstoken und der damit verbundenen Trauer gibt, aber trotz vieler Experimente und des Lesens vieler frustrierend vager Blog-Artikel (FB und andere) habe ich immer noch Schwierigkeiten, eine klare Antwort auf meine Bedürfnisse zu erhalten . Lassen Sie mich meinen bisherigen Prozess kurz und bündig zusammenfassen:

  • Ich erstelle eine Website, die serverseitig die Beiträge / Status von einer einzelnen Facebook-Seite abrufen muss
  • Ich bin ein Administrator dieser Facebook-Seite
  • Ich habe eine Facebook App erstellt
  • Mit dem Facebook Graph API Explorer habe ich einen kurzlebigen Schlüssel generiert, der mit meiner App und meinem Konto verbunden ist und meinem Konto die Berechtigung zum Anzeigen der Zugriffstoken für meine Seiten erteilt
  • Ich habe meine kurzlebig Schlüssel zu einem langlebigen Schlüssel (60 Tage) ala Szenario umgewandelt 4 aus diesem

Und hier stecke ich fest. Mein 60-Tage-Schlüssel funktioniert gut, damit mein Server die benötigten Informationen von der Seite abruft, aber soweit ich das beurteilen kann, gibt es keine Möglichkeit, diesen 60-Tage-Schlüssel programmgesteuert zu erweitern. Ich kenne auch keine Möglichkeit, einen neuen kurzlebigen Schlüssel zu generieren, ohne manuell zum Facebook Graph API Explorer zu gehen und einen zu erstellen.

Da mein Server die Anforderungen an die Facebook-API stellt und kein benutzerbasiertes System (bei dem ich leicht verlangen kann, dass ein Benutzer die Facebook-App erneut autorisiert), entsteht ein sehr klobiges System. Gibt offline_accesses wirklich keine dauerhafte Möglichkeit, dass mein Server Informationen von meiner eigenen Seite abruft , da Facebook veraltet ist? Muss ich wirklich alle 60 Tage einen neuen Schlüssel von Hand erstellen und meinen Server manuell damit aktualisieren?

Oder fehlt mir etwas?

Aktualisieren:

Die hier gefundene Schritt-für-Schritt-Anleitung wurde in eine eigene Antwort migriert .

redhotvengeance
quelle
Das ist fantastisch. Ich bin in der gleichen Situation und habe nach Informationen zu diesem Thema gesucht. Ist es sicher, dass dieses Token keine FB-Plattformrichtlinien verletzt? Ich frage nur, ob ich sicher bin.
Onigunn
2
Die eigene Dokumentation von @asrijaal Facebook (siehe Szenario 5) besagt, dass diese Seitenzugriffstoken nicht ablaufen. Ich würde sagen, es ist sicher anzunehmen, dass sie den Richtlinien von Facebook entsprechen.
Redhotvengeance
"Ich dachte, es wäre gut, einen klaren Schritt-für-Schritt-Prozess zu verlassen" - Himmel verbietet :) Danke @redhotvengeance
Steve McGill
Sie haben einen Tippfehler mit der URL Ihres Seitenzugriffstokens. Sollte ein sein? kein & nach Konten. Verbrachte eine Weile damit herauszufinden, warum dies nicht funktionierte. : P
Joren
@ Joren In der Tat - es ist jetzt behoben. Vielen Dank!
Redhotvengeance

Antworten:

188

Dies sind die Schritte, die zuvor in der Frage enthalten waren - sie wurden auf diese Antwort migriert.

Nachdem festgestellt wurde, dass es möglich ist, ein Facebook-Seitenzugriffstoken zu generieren, das nicht abläuft (mithilfe von @Igy), finden Sie hier eine klare, schrittweise Anleitung für alle, die dasselbe suchen:

  1. Stellen Sie sicher, dass Sie der Administrator der FB-Seite sind, von der Sie Informationen abrufen möchten
  2. Erstellen Sie eine FB-App (sollte mit demselben Benutzerkonto wie der Seitenadministrator sein)
  3. Gehen Sie zum Facebook Graph API Explorer
  4. Wählen Sie oben rechts die von Ihnen erstellte FB-App aus der Dropdown-Liste "Anwendung" aus
  5. Klicken Sie auf "Get Access Token".
  6. Stellen Sie sicher, dass Sie die manage_pagesBerechtigung hinzufügen
  7. Konvertieren Sie dieses kurzlebige Zugriffstoken in ein langlebiges, indem Sie diesen Graph-API-Aufruf ausführen: 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. Holen Sie sich den neuen, langlebigen Zugriffstoken, der zurückgegeben wurde
  9. Führen Sie einen Graph-API-Aufruf durch, um Ihre Konten mithilfe des neuen langlebigen Zugriffstokens anzuzeigen: https://graph.facebook.com/me/accounts?access_token=<your long-lived access token>
  10. Holen access_tokenSie sich die Seite, von der Sie Informationen abrufen möchten
  11. Fusseln Sie den Token, um zu sehen, dass er eingestellt ist Expires: Never!

Das sollte es tun. Sie sollten jetzt über ein Facebook-Seitenzugriffstoken verfügen, das nicht abläuft, es sei denn:

  • Sie ändern Ihr Passwort für das Facebook-Konto
  • Sie verlieren den Administratorzugriff für die Zielseite
  • Sie löschen oder deaktivieren Ihre Facebook-App

All dies führt dazu, dass das Zugriffstoken ungültig wird.

Wenn dies (#100) Tried accessing nonexisting field (accounts) on node type (Page)der Fall ist, rufen Sie den Access Token Debugger auf , kopieren Sie den Wert von User IDund verwenden Sie ihn, um den "Ich" -Teil der URL in Schritt 9 zu ersetzen.

redhotvengeance
quelle
2
Wie und wo mache ich Schritt 6?
Stefan Müller
5
@ StefanMüller Wenn Sie auf der Seite Graph API Explorer auf "Zugriffstoken abrufen" klicken, wird ein Dialogfeld "Berechtigungen auswählen" angezeigt. Die manage_pagesOption befindet sich unter der Extended PermissionsRegisterkarte.
Redhotvengeance
2
Toll! Dies funktioniert wie ein Zauber, und dies wird als SEITE veröffentlicht, nicht als Benutzer.
Benjamin Piette
3
Ich glaube, das ist jetzt veraltet. und Sie erhalten nur ein Zugriffstoken, das in etwa zwei Monaten abläuft.
Qaiser Wali
7
Ich habe das alles jetzt getan und es funktioniert, außer dass die langlebige Token-ID nach 2 Monaten abläuft und nicht unendlich ist. Außerdem verfügt der Acces Token Debugger über einen Link am unteren Rand des Formulars, mit dem ein kurzlebiges Zugriffstoken auf ein langlebiges Zugriffstoken erweitert werden kann.
SlimIT
15

Dies wird in dem überdachten Offline - Zugriff deprecation Dokument

Verwenden Sie das 60-Tage-Token für den Seitenadministrator, um ein Seitenzugriffstoken (über /PAGE_ID?fields=access_tokenoder /me/accounts) abzurufen. Das Seitenzugriffstoken hat keine Ablaufzeit

Igy
quelle
5
Seufzer. In der Tat scheint dies das Ticket zu sein. Ich hätte schwören können, dass ich jede mögliche Kombination dieser Schritte ausprobiert habe - anscheinend habe ich den verpasst, der tatsächlich funktioniert. Was für ein absolut komplizierter Satz erforderlicher Aktionen. Vielen Dank für Ihre Hilfe!
Redhotvengeance
1
So viele Stücke im ganzen Internet, das ist eines, das tatsächlich funktioniert.
Ernesto
3

Ein Ansatz, der 2019 funktioniert

Ich habe kürzlich versucht, etwas Ähnliches zu erreichen (wie in diesem Thread beschrieben), aber ich wollte sicherstellen, dass die aktuellen Richtlinien von Facebook eingehalten werden. Deshalb habe ich ein wenig recherchiert und hier teile ich mit, was ich gefunden habe.

Mein Anwendungsfall

Wie ich bereits sagte, ist mein Anwendungsfall dem hier beschriebenen sehr ähnlich. das ist:

  • Ich arbeite für einen Schulbezirk.
  • Sie verwenden ein Software-Tool, um so ziemlich alles zu verwalten, was mit dem Schultransport zu tun hat.
  • Mit diesem Tool können sie E-Mail-Benachrichtigungen (an Abonnenten) senden, wenn sie Busverzögerungsalarme und Schulschließungsalarme veröffentlichen.
  • Viele Leute in der Community folgen der Organisation auf ihrer Facebook-Seite, und dies ist der einzige Ort, an dem sie nach diesen Benachrichtigungen suchen.
  • Daher muss ein Mitarbeiter der Organisation jede Benachrichtigung manuell auf der Facebook-Seite veröffentlichen (zusätzlich zur Erstellung in der Transportsoftware). Darüber hinaus laufen diese Benachrichtigungen schließlich ab (oder werden einfach gelöscht, bevor sie ablaufen), sodass der Mitarbeiter später zurückgehen muss, um sie auch manuell zu löschen.
  • Es ist eine Zeitspanne, also versuchen wir hier, ein einfaches System zu entwickeln, das die Datenbank des Software-Tools regelmäßig nach neuen (und abgelaufenen) Benachrichtigungen abfragt und diese auf der Facebook-Seite aktualisiert (dh hinzufügt und entfernt).

Dies ist meiner Ansicht nach ein legitimer Anwendungsfall, aber ich war mir nicht sicher, wie ich ihn auf eine Weise implementieren sollte, die den Richtlinien von Facebook entspricht.

Die akzeptierte Antwort

Ich habe die Schritte der akzeptierten Antwort befolgt und es hat funktioniert, außer dass sich die Dinge anscheinend geändert haben: Obwohl das generierte Seitentoken nicht abläuft, access to dataläuft es nach etwa 60 Tagen ab. Sie werden dies auch sehen, wenn Sie die Prozedur befolgen und das Seitentoken im FB Token Debugger Tool überprüfen .

Außerdem ist die Tatsache, dass die generierten Seitentoken an das Benutzerkonto gebunden sind, ebenfalls bedauerlich, denn wenn der Benutzer sein Kennwort aktualisiert, wird das Seitentoken ebenfalls ungültig.

Wie es 2019 geht

Nach mehreren Stunden Recherche bin ich auf den folgenden Artikel zur Facebook-Dokumentation gestoßen: Business Login for Direct Businesses .

Es stellt sich heraus, dass es nun möglich ist, gemäß den im obigen Artikel beschriebenen Schritten ein Seitentoken zu generieren, das keinem bestimmten Facebook-Benutzerkonto zugeordnet ist und nicht abläuft (es sei denn, die FB-App wird gelöscht oder das zugrunde liegende Anwendungstoken wird gelöscht, weißt du ...)

Hier sind die Schritte und die wichtigsten Teile:

  • Sie benötigen ein Business Manager- Konto.
    • Eine Überprüfung ist erforderlich und ein digitaler Vertrag muss unterzeichnet werden.
  • Sie müssen die Facebook-Zielseite zu diesem Konto hinzufügen.
  • Sie müssen eine Facebook-App erstellen und diese App auch auf dasselbe Business Manager-Konto übertragen.
  • Die App muss den Überprüfungsprozess von Facebook durchlaufen, da die folgenden Berechtigungen erforderlich sind: manage_pagesund publish_pages.
    • Wichtiger Hinweis Damit die mit dem Token zum Generieren von Seiten erstellten Beiträge für andere Benutzer als die Anwendungsadministratoren sichtbar sind, muss diese App veröffentlicht und genehmigt worden sein.
    • Sie können weiterhin mit dem Konzept experimentieren, ohne es zur Überprüfung einzureichen, aber die Beiträge sind nicht öffentlich sichtbar.
  • Im Business Manager-Konto (erst nachdem Ihre App und Seite dem Konto hinzugefügt wurden) müssen Sie einen sogenannten Systembenutzer erstellen und dieser Benutzeradministratorrolle (oder Berechtigungen) der Facebook-Zielseite zuweisen.
    • Ein Systembenutzer gehört dem Business Manager-Konto und ist nicht an einen bestimmten Benutzer gebunden. Mein derzeitiges Verständnis ist, dass ein Hauptanwendungsfall für einen Systembenutzer der programmatische Zugriff auf die Graph-API von Facebook ist (genau das, was wir brauchen).
  • Dann müssen Sie für diesen Systembenutzer ein Zugriffstoken generieren (das niemals abläuft). Sie werden aufgefordert, für welche App auszuwählen. Anschließend wählen Sie Ihre Ziel-App aus.
  • Sie müssen dann das generierte App-Token verwenden, um ein Seitentoken zu generieren, das ebenfalls niemals abläuft. Das Verfahren wird in diesem Artikel wie folgt beschrieben :
GET /<PAGE_ID>?fields=access_token&access_token=<SYSTEM_USER_ACCESS_TOKEN>
  • Das ist es.

Dieses Token läuft niemals ab und ist nicht an einen bestimmten Facebook-Nutzer gebunden. Es ist also genau das, was wir brauchen!

Der letzte Teil besteht darin, sicherzustellen, dass Ihre Facebook-App von Facebook genehmigt wird. Es ist in der Tat der wichtigste Teil, denn das gesamte Verfahren ist wertlos, wenn die Leute unsere Beiträge nicht sehen.

Ich wollte sicher wissen, dass ich mich auf das oben beschriebene Verfahren verlassen kann, um etwas für meinen Kunden zu erstellen, ohne dass Facebook es am Ende ablehnt. Deshalb habe ich vorher (dh bevor ich anfing, an dem Projekt meines Kunden zu arbeiten) den gesamten Prozess von durchlaufen Erstellen einer Seite, einer App, eines Business Manager-Kontos usw. Ich habe mein Unternehmen überprüft. Ich habe meine App zur Überprüfung eingereicht. In meiner Anfrage war ich sehr spezifisch in Bezug auf meinen Anwendungsfall und betonte, dass die App für den "Selbstgebrauch" bestimmt ist (dh, dass die Organisation eine App für sich selbst entwickelt, nicht für andere Facebook-Benutzer). Ich wurde ohne weniger als 24 Stunden genehmigt.

Einige weitere Hinweise zum App-Überprüfungsprozess:

  • Ich musste eine Plattform für die App auswählen, also habe ich die Website ausgewählt .
  • Ich musste angeben, warum die App die beiden Berechtigungen benötigte und wie sie verwendet werden sollte.
  • Ich musste angeben, warum der Prüfer sich nicht bei meiner App anmelden und es versuchen konnte (dh weil die App von einem Arbeitsprozess verwendet wird).
  • Für die obligatorischen Screencasts habe ich einfach manuelle Vorgänge im Terminal mit dem curlDienstprogramm vorgestellt (um das Seitentoken zu generieren und Beiträge auf der Facebook-Seite zu verfassen). Ich habe auch gezeigt, wie ich Business Manager verwendet habe, um den Systembenutzer mit der Seite zu verknüpfen und ein Token zu generieren, und so weiter.
  • Auch hier war ich sehr spezifisch in Bezug auf meinen Anwendungsfall, und ich denke, das hat geholfen.

Ich hoffe, dass diese Informationen für Menschen mit ähnlichen Anwendungsfällen nützlich sind.

Focorner
quelle
1

Vielen Dank an @redhotvengeance für die Schritt-für-Schritt-Anleitung.

Nach einiger Zeit ist nun in der Facebook-Dokumentation klar beschrieben:

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

Erweitern von Seitenzugriffstoken

Apps können ein Seitenzugriffstoken von Seitenadministratoren abrufen, wenn sie sich mit der Berechtigung "manage_pages" authentifizieren. Wenn das zum Abrufen dieses Seitenzugriffstokens verwendete Benutzerzugriffstoken nur von kurzer Dauer ist, ist das Seitenzugriffstoken ebenfalls von kurzer Dauer.

Um ein längerlebiges Seitenzugriffstoken zu erhalten, tauschen Sie das Benutzerzugriffstoken wie oben beschrieben gegen ein langlebiges aus und fordern Sie dann das Seitenzugriffstoken an. Das resultierende Seitenzugriffstoken hat keine Ablaufzeit.

Athlan
quelle
0

Sie können auch über das App-Dashboard auf Facebook kopieren und einfügen. Die Schritte:

  1. Gehen Sie zu https://developers.facebook.com

  2. Wählen Sie Ihre App in der oberen rechten Ecke der Seite aus (Bild davon, wie sie aussieht)

  3. Klicken Sie links in den Optionen auf Messenger (es wird automatisch eingestellt) (Bild davon, wie es aussieht)
  4. Gehen Sie auf der Seite zum Abschnitt "Token-Generierung". Wählen Sie aus, für welche Seite Sie das Token generieren möchten. (Bild davon, wie dieser Abschnitt aussieht)
  5. Das Kopieren und Einfügen Ihres Seitentokens, wo immer Sie es benötigen.

Denken Sie daran, dass Ihr Token zwar theoretisch nicht abläuft, aber direkt mit dem Facebook-Konto verknüpft ist, bei dem Sie angemeldet sind. Angenommen, Sie ändern Ihr Passwort oder entfernen die Berechtigungen zwischen Ihrem Konto und Ihrer App. Dann ist Ihr Token nicht mehr gültig.

Heidi
quelle