Długotrwały token dostępu FB dla serwera do pobierania informacji o stronie FB

115

Zdaję sobie sprawę, że jest wiele pytań dotyczących tokenów dostępu do Facebooka i żalu, jaki powodują, ale pomimo wielu eksperymentów i czytania wielu frustrująco niejasnych artykułów na blogach (FB i nie tylko), wciąż staram się uzyskać jasną odpowiedź na swoje potrzeby . Pozwólcie, że zwięźle przedstawię dotychczasowy proces:

  • Tworzę witrynę, która po stronie serwera musi pobierać posty / statusy z jednej strony na Facebooku
  • Jestem administratorem tej strony na Facebooku
  • Stworzyłem aplikację na Facebooku
  • Korzystając z Facebook Graph API Explorer , wygenerowałem krótkotrwały klucz, połączony z moją aplikacją i kontem, który daje mojemu kontu pozwolenie na przeglądanie tokenów dostępu do moich stron
  • Przekonwertowałem mój klucz krótkotrwały na klucz długowieczny (60 dni) ala scenariusz 4 z tego

I tutaj utknąłem. Mój klucz 60-dniowy działa dobrze, aby mój serwer pobierał informacje potrzebne ze strony, ale z tego co wiem, nie ma możliwości programowego przedłużenia tego klucza 60-dniowego. Nie znam też sposobu na wygenerowanie nowego krótkotrwałego klucza bez ręcznego przechodzenia do Facebook Graph API Explorer i tworzenia go.

Ponieważ to mój serwer wysyła żądania do interfejsu API Facebooka, a nie system oparty na użytkownikach (gdzie mógłbym łatwo zażądać, aby użytkownik ponownie autoryzował aplikację Facebooka), tworzy to bardzo niezgrabny system. Odkąd Facebook został wycofany offline_access, czy naprawdę nie ma stałego sposobu, aby mój serwer pobierał informacje z mojej własnej strony? Czy naprawdę będę musiał ręcznie utworzyć nowy klucz i ręcznie aktualizować go na serwerze co 60 dni?

A może jest coś, czego mi brakuje?

Aktualizacja:

Przewodnik krok po kroku, który został wcześniej znaleziony tutaj, został przeniesiony do jego własnej odpowiedzi .

redhotvengeance
źródło
To jest niesamowite. Jestem w takiej samej sytuacji i szukałem informacji na ten temat. Czy to bezpieczne, że ten token nie łamie żadnych zasad platformy FB? Tylko pytam, żeby się upewnić.
onigunn
2
własny @asrijaal Facebooka dokumentacja (przyjrzeć Scenariusz 5) mówi, że te tokeny dostępu strona nie wygasają. Powiedziałbym, że można bezpiecznie założyć, że są one zgodne z zasadami Facebooka.
redhotvengeance
„Pomyślałem, że dobrze byłoby zostawić jasny proces krok po kroku” - niebios :) Dzięki @redhotvengeance
Steve McGill
Masz literówkę w adresie URL tokena dostępu do strony. Powinien być? nie a & po kontach. Spędziłem trochę czasu, próbując dowiedzieć się, dlaczego to nie działa. : P
Joren
@Joren Rzeczywiście - zostało to naprawione. Dzięki!
redhotvengeance

Odpowiedzi:

189

To są kroki, które były wcześniej w pytaniu - zostały przeniesione do tej odpowiedzi.

Po stwierdzeniu, że można wygenerować token dostępu do strony na Facebooku, który nie wygasa (z pomocą @Igy), oto przejrzysta instrukcja krok po kroku dla wszystkich, którzy szukają tego samego:

  1. Upewnij się, że jesteś administratorem strony FB, z której chcesz pobrać informacje
  2. Utwórz aplikację FB (powinna mieć to samo konto użytkownika, które jest administratorem strony)
  3. Udaj się do Facebook Graph API Explorer
  4. W prawym górnym rogu wybierz utworzoną przez siebie aplikację FB z rozwijanej listy „Aplikacja”
  5. Kliknij „Uzyskaj token dostępu”
  6. Upewnij się, że dodajesz manage_pagesuprawnienia
  7. Przekonwertuj ten krótkotrwały token dostępu na długoterminowy, wykonując to wywołanie interfejsu Graph API: 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. Chwyć ponownie zwrócony nowy długowieczny token dostępu
  9. Wykonaj wywołanie interfejsu Graph API, aby wyświetlić swoje konta za pomocą nowego długoterminowego tokenu dostępu: https://graph.facebook.com/me/accounts?access_token=<your long-lived access token>
  10. Chwyć access_tokenstronę, z której będziesz pobierać informacje
  11. Zetrzyj żeton, aby sprawdzić, czy jest ustawiony na Expires: Never!

Że należy to zrobić. Powinieneś teraz mieć token dostępu do strony na Facebooku, który nie wygasa, chyba że:

  • Zmieniasz hasło do konta na Facebooku
  • Utracisz dostęp administratora do strony docelowej
  • Usuwasz lub cofasz autoryzację swojej aplikacji Facebook

Każde z nich spowoduje unieważnienie tokena dostępu.

Jeśli otrzymujesz (#100) Tried accessing nonexisting field (accounts) on node type (Page), przejdź do narzędzia Access Token Debugger , skopiuj wartość User IDi użyj jej do zastąpienia części „ja” adresu URL w kroku 9.

redhotvengeance
źródło
2
Jak i gdzie mam zrobić krok 6?
Stefan Müller,
5
@ StefanMüller Po kliknięciu „Get Access Token” na stronie Graph API Explorer, pojawi się okno dialogowe „Select Permissions”. manage_pagesOpcja jest pod Extended Permissionskarcie.
redhotvengeance
2
Wspaniały! To działa jak urok i jest publikowane jako STRONA, a nie jako użytkownik.
Benjamin Piette
3
Myślę, że to jest teraz przestarzałe. i otrzymujesz tylko token dostępu, który wygasa za około dwa miesiące.
Qaiser Wali,
7
Zrobiłem to wszystko teraz i działa z tym wyjątkiem, że długowieczny identyfikator tokena wygasa po 2 miesiącach i nie jest nieskończony. Również debuger tokenów dostępu ma łącze u dołu formularza, aby przedłużyć token dostępu o krótkim czasie trwania do tokenu dostępu o długim czasie trwania.
SlimIT
15

Jest to omówione w dokumencie wycofania dostępu w trybie offline

Użyj 60-dniowego tokena dla administratora strony, aby pobrać token dostępu do strony (przez /PAGE_ID?fields=access_tokenlub /me/accounts) - token dostępu do strony nie będzie miał czasu wygaśnięcia

Igy
źródło
5
Westchnienie. Rzeczywiście, wydaje się, że to bilet. Mógłbym przysiąc, że wypróbowałem każdą możliwą kombinację tych kroków - najwyraźniej przegapiłem tę, która faktycznie działa. Cóż za absolutnie zawiły zestaw wymaganych działań. Dziękuję bardzo za pomoc!
redhotvengeance
1
Tak wiele elementów w całym Internecie, to ten, który faktycznie działa.
Ernesto
Czy istnieje sposób, aby uzyskać te 60 dni za page_access_tokenpomocą kodu w javascript? Jak sposób na zdobycie user_access_token> FB.getAuthResponse()['accessToken'];Dzięki!
Tulon
4

Podejście, które sprawdza się w 2019 roku

Ostatnio próbowałem osiągnąć coś podobnego (do przypadku użycia opisanego w tym wątku), ale chciałem upewnić się, że przestrzegam obecnych zasad Facebooka, więc poszukałem trochę informacji i tutaj dzielę się tym, co znalazłem.

Mój przypadek użycia

Tak więc, jak już powiedziałem, mój przypadek użycia jest bardzo podobny do opisanego tutaj; to jest:

  • Wykonuję pracę dla okręgu szkolnego.
  • Używają narzędzia programowego do zarządzania prawie wszystkim, co dotyczy transportu szkolnego.
  • To narzędzie umożliwia im wysyłanie powiadomień e-mail (do subskrybentów), gdy publikują alerty o opóźnieniach autobusów i powiadomienia o zamknięciu szkoły.
  • Wiele osób ze społeczności śledzi organizację na swojej stronie na Facebooku i jest to jedyne miejsce, w którym szukają tych alertów.
  • Pracownik organizacji musi więc ręcznie publikować każde zgłoszenie na stronie na Facebooku (oprócz tworzenia go w oprogramowaniu transportowym). Co więcej, te powiadomienia ostatecznie wygasają (lub są po prostu usuwane przed wygaśnięciem), więc pracownik musi później wrócić, aby usunąć je ręcznie.
  • To przerwa w czasie, więc staramy się tutaj stworzyć prosty system, który okresowo sonduje bazę danych oprogramowania pod kątem nowych (i wygasłych) powiadomień i aktualizuje je (tj. Dodaje i usuwa) na stronie na Facebooku.

Moim zdaniem jest to uzasadniony przypadek użycia, ale nie byłem pewien, jak go wdrożyć w sposób zgodny z polityką Facebooka.

Zaakceptowana odpowiedź

Postępowałem zgodnie z krokami zaakceptowanej odpowiedzi i zadziałało, z tym że wygląda na to, że coś się zmieniło: teraz, mimo że wygenerowany token strony nie traci ważności, access to datawygasa po około 60 dniach. Zobaczysz to również, jeśli wykonasz procedurę i sprawdzisz token strony w narzędziu FB Token Debugger Tool .

Poza tym fakt, że wygenerowane tokeny stron są powiązane z kontem użytkownika, jest również niefortunny, ponieważ jeśli użytkownik zaktualizuje swoje hasło, to token strony również zostanie unieważniony.

Jak to zrobić w 2019 roku

Po kilku godzinach poszukiwań natknąłem się na następujący artykuł w dokumentacji Facebooka: Business Login for Direct Businesses .

Okazuje się, że można teraz, wykonując kroki opisane w powyższym artykule, wygenerować token strony, który nie jest powiązany z żadnym konkretnym kontem użytkownika Facebooka i który nie wygaśnie (chyba że zostanie usunięta aplikacja FB lub podstawowy token aplikacji zostanie usunięty, wiesz ...)

Oto kroki i najważniejsze części:

  • Potrzebujesz konta Business Managera .
    • Wymagana będzie weryfikacja i podpisanie umowy cyfrowej.
  • Musisz dodać docelową stronę na Facebooku do tego konta.
  • Musisz utworzyć aplikację na Facebooku i przenieść ją również na to samo konto Business Managera.
  • Aplikacja będzie musiała przejść przez proces recenzji na Facebooku, ponieważ będą potrzebne następujące uprawnienia: manage_pagesi publish_pages.
    • Ważna uwaga Aby posty utworzone przy użyciu tokena generowania strony były widoczne dla użytkowników innych niż administratorzy aplikacji, ta aplikacja będzie musiała zostać opublikowana i zatwierdzona.
    • Nadal możesz eksperymentować z tą koncepcją bez przesyłania do recenzji, ale posty nie będą widoczne publicznie.
  • Na koncie Business Manager (tylko po dodaniu aplikacji i strony do konta) musisz utworzyć tak zwanego użytkownika systemu i nadać temu użytkownikowi rolę administratora (lub uprawnienia) docelowej stronie na Facebooku.
    • Użytkownik systemu jest własnością konta Business Manager i nie jest powiązany z określonym użytkownikiem. Obecnie rozumiem, że jednym z głównych przypadków użycia dla użytkownika systemu jest programowy dostęp do interfejsu API Graph na Facebooku (właśnie tego potrzebujemy).
  • Następnie dla tego użytkownika systemu musisz wygenerować token dostępu (który nigdy nie wygasa). Zostaniesz poproszony o wybranie aplikacji. Następnie wybierzesz aplikację docelową.
  • Następnie musisz użyć wygenerowanego tokenu aplikacji, aby wygenerować token strony, który również nigdy nie wygasa. Procedura jest opisana w tym artykule jako:
GET /<PAGE_ID>?fields=access_token&access_token=<SYSTEM_USER_ACCESS_TOKEN>
  • Otóż ​​to.

Ten token nigdy nie wygaśnie i nie będzie powiązany z konkretnym użytkownikiem Facebooka, więc jest dokładnie tym, czego potrzebujemy!

Ostatnią częścią jest upewnienie się, że Twoja aplikacja Facebook zostanie zatwierdzona przez Facebooka. To właściwie najważniejsza część, bo cała procedura jest bezwartościowa, jeśli ludzie nie widzą naszych postów.

Chciałem wiedzieć na pewno, że mogę polegać na powyższej procedurze i zbudować coś dla mojego klienta bez Facebooka odrzucającego to w końcu, więc wcześniej (tj. Przed rozpoczęciem pracy nad projektem mojego klienta) przeszedłem przez cały proces tworzenie strony, aplikacji, konta Business Managera itp. Zweryfikowałem swoją firmę. Przesłałem moją aplikację do sprawdzenia. W mojej prośbie bardzo szczegółowo opisałem mój przypadek użycia i podkreśliłem, że aplikacja jest przeznaczona do „użytku własnego” (tj. Organizacja opracowuje aplikację dla siebie, a nie dla innych użytkowników Facebooka). Zostałem zatwierdzony bez mniej niż 24 godzin.

Kilka innych uwag na temat procesu recenzji aplikacji:

  • Musiałem wybrać platformę dla aplikacji, więc wybrałem stronę internetową .
  • Musiałem wskazać, dlaczego aplikacja potrzebuje tych dwóch uprawnień i jak będzie ich używać.
  • Musiałem wskazać, dlaczego recenzent nie byłby w stanie zalogować się do mojej aplikacji i wypróbować jej (tj. Ponieważ aplikacja będzie używana przez proces roboczy).
  • W przypadku obowiązkowych screencastów po prostu przedstawiłem ręczne operacje w terminalu za pomocą curlnarzędzia (do generowania tokena strony i wysyłania postów na stronę na Facebooku). Pokazałem również, jak za pomocą Business Managera łączyłem użytkownika systemu ze stroną i generowałem token i tak dalej.
  • Ponownie podałem bardzo konkretny przypadek użycia i myślę, że to pomogło.

Mam nadzieję, że te informacje będą przydatne dla osób o podobnych przypadkach użycia.

focorner
źródło
1

Wielkie dzięki dla @redhotvengeance za przewodnik krok po kroku.

Po jakimś czasie w dokumentacji Facebooka jest teraz jasno opisane:

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

Rozszerzanie tokenów dostępu do strony

Aplikacje mogą pobierać token dostępu do strony od administratorów strony, gdy uwierzytelniają się z uprawnieniem manage_pages. Jeśli token dostępu użytkownika używany do pobierania tego tokenu dostępu do strony jest krótkotrwały, token dostępu do strony również będzie krótkotrwały.

Aby uzyskać token dostępu do strony o dłuższej żywotności, wymień token dostępu użytkownika na token o długiej żywotności, jak powyżej, a następnie zażądaj tokenu dostępu do strony. Wynikowy token dostępu do strony nie będzie miał żadnego czasu wygaśnięcia.

Athlan
źródło
0

Możesz także kopiować i wklejać z pulpitu aplikacji na Facebooku. Kroki:

  1. Przejdź do https://developers.facebook.com

  2. Wybierz swoją aplikację w prawym górnym rogu strony (zdjęcie, jak to wygląda)

  3. Kliknij Messenger z opcji po lewej stronie (przejdzie do ustawień automatycznie) (zdjęcie, jak to wygląda)
  4. Przejdź do sekcji „Generowanie tokena” na stronie. Wybierz stronę, dla której chcesz wygenerować token. (zdjęcie jak wygląda ta sekcja)
  5. Kopia i wklej token strony, gdziekolwiek jest to potrzebne.

Pamiętaj, że chociaż teoretycznie twój token nie wygaśnie, jest bezpośrednio powiązany z kontem na Facebooku, na które jesteś zalogowany. Powiedz więc, że zmieniasz hasło lub usuwasz uprawnienia między kontem a aplikacją, a token nie będzie już ważny.

Heidi
źródło