Generowanie Facebook Access Token dla aplikacji

Programowanie

Po aktualizacji interfejsu Graph API Facebooka do wersji 2.0, dość kłopotliwym tematem stało się zdobywanie tzw. tokenu dostępowego. Przedstawiamy jedno z skutecznych rozwiązań.


Po aktualizacji interfejsu Graph API Facebooka do wersji 2.0, dość kłopotliwym tematem stało się zdobywanie tzw. tokenu dostępowego, służącego do autoryzacji (z technicznego punktu widzenia wydaje się także że można token zaliczyć jako element uwierzytelniania). Niegdyś istniała możliwość bezproblemowego wygenerowania takiego tokenu bez okresu ważności, a więc nigdy nie wygasającego, dokładnie tak jak czyni Twitter. Niestety aktualnie token taki domyślnie uzyskuje jedynie 60 dni ważności i po tym okresie wygasa. Należy go wtedy zaktualizować, bądź wygenerować nowy lub skorzystać z naszego rozwiązania, które wyjaśnimy w dalszej części tego wpisu.

Poniżej przedstawiamy receptę na uzyskanie tokenu bez okresu ważności (never expires). Wpis ten kierujemy dla programistów / webmasterów zajmujących się tym tematem, być może ułatwimy nieco pracę i karkołomne przebijanie się przez odmęty Internetu w poszukiwaniu rozwiązania.

Przykładowy scenariusz, który chcemy osiągnąć: automatyzacja procesu dodawania postów, galerii na tablice funpage'a z poziomu oprogramowania zewnętrznego z wykorzystaniem Facebook SDK. Co potrzebujemy:

  • konto programisty na Facebooku (https://developers.facebook.com/)
  • dostęp do docelowego funpage'a
  • serwer na którym będziemy działać (może być lokalny)

Krok 1

Logujemy się na funpage'a i dodajemy nasze konto programisty do puli administratorów witryny (Ustawienia - Role na stronie). Przy okazji zdobywamy Identyfikator strony - Page ID, wchodząc w Informację (obok Osi czasu), następnie Informacje o stronie - ID strony na Facebooku. Jest to ciąg numeryczny określający w API na jakiej stronie operujemy. Często możemy się spotkać z problemem akceptacji zaproszenia do administracji stroną - pamiętać należy, aby ją najpierw polubić (profilem programisty) oraz dodać do znajomych bazowy profil zarządzający funpage'em. To w większości przypadków rozwiązuje problem.

Krok 2

Dodajemy aplikację webową na koncie programisty, konfigurujemy ją wstępnie, w szczególności uzupełniamy w sekcji Settings parametr Site URL jako adres naszego serwera. Będzie to aplikacja za pomocą, której będziemy mogli dokonywać zmian na stronie funpage'a. Do następnych etapów potrzebne nam będą dwie informacje: App ID - identyfikator aplikacji, App Secret - sekret aplikacji. Obydwie dane widnieją w sekcji Dashboard.

Krok 3

Na serwerze lokalnym tworzymy skrypt / kontroler - cokolwiek co wylistuje nam dane przychodzące z Facebooka (parametry żądania typu GET). Np. http://server.dev/print.php.

Krok 4

W przeglądarce otwieramy adres URL w celu wygenerowania kodu, który posłuży nam do nadania uprawnień i dalszego uzyskania Access Tokenu:

https://www.facebook.com/dialog/oauth?client_id={APP_ID}&redirect_uri={SERVER_PRINT_URL}&scope=manage_pages,publish_stream,publish_actions

Parametr client_id to App ID naszej aplikacji, redirect_uri to adres naszego serwera listującego dane, scope natomiast to lista uprawnień, którą chcemy nadać aplikacji. Wymienione w przykładowym adresie są bardzo szerokie i z reguły wystarczają w większości przypadków. Po logowaniu do FB i zatwierdzeniu dostępu jeśli wszystko poszło zgodnie z planem, zostaniemy przekserowani na podany adres listujący i ujrzymy wyprintowany parametr code z zawartością (długi ciąg alfanumeryczny).

Krok 5

Kolejnym i ostatnim krokiem jest uzyskanie tokenu poprzez przejście pod adres URL:

https://graph.facebook.com/oauth/access_token?client_id={APP ID}&redirect_uri={SERVER_PRINT_URL}&client_secret={APP SECRET}&code={CODE}

Również w tym wypadku client_id to identyfikator naszej aplikacji. redirect_uri jako adres naszego skryptu, client_secret - sekret naszej aplikacji (patrz krok 2). Ostatnim parametrem jest code - ciąg który uzyskaliśmy w poprzednim kroku. Jeśli poprawnie wpisaliśmy wszystkie dane, uzyskamy w efekcie zwrócony przez FB parametr access_token z zawartością, która nas interesuje. Jeśli zdarzy się, iż zwrotka nada nam także parametr expires, klucz ten ma okres ważności określony w sekundach tego parametru, w przeciwnym razie nigdy nie wygasa.

Tak uzyskany token można sprawdzić pod adresem: https://developers.facebook.com/tools/debug/access_token

Powyższe kroki są o tyle ciekawą formą uzyskiwania klucza, iż można ją dość łatwo zautomatyzować w każdym oprogramowaniu korzystającym z Facebook SDK w celu odnawiania klucza zarówno wygasającego jak i nie mającego okresu ważności.

Aktualizacja 05.04.2015

Powyżej uzyskany token jest access tokenem związanym z profilem dewelopera, aby zobaczyć listę tokenów dostępowych w swoim posiadaniu (również tych aplikacyjnych na których może nam najbardziej zależeć) skorzystajmy z adresu URL:

https://graph.facebook.com/me/accounts?access_token={ACCESS_TOKEN}
Opublikowano Luty 2015