ca5
2/20/2016 - 6:41 PM

Facebook API: 有効期限の長い Access Token を取得する

Facebook API: 有効期限の長い Access Token を取得する

Facebook API: 有効期限の長い Access Token を取得する

tl;dr

  1. User Access Token を取得する
  2. それを使って長い期限のトークンを取得する
  3. /me/accounts?access_token={long_lived_token}
  4. 無期限のトークンが手に入る

API のバージョン

Facebook Graph API v2.5

参照

ここに全部書いてある

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

Access Token と期限

Facebook の Access Token は 4 種類あるらしく、それぞれアクセスできる API の範囲が違う。 また有効期限も、短いもの(1 時間程度)、長いもの(60 日)、無期限のものがある。

それぞれ取得方法が異なっており、おおまかに以下の通りだと思う。 古い記事には offline_access scope をつけると無期限のトークンが取れると説明されているものもあるが、offline_access はすでに廃止されている

種類\期限短い長い無期限
UserLogin Dialog など以下で説明×
Appgrant_type=client_credentials×`{app_id}\{app_secret}`
PageGraph API で /me/accounts をコール×以下で説明

Open Graph Debugger にトークンを入れると、種類、紐づけられたユーザーとアプリ、期限、スコープなどを確認できる

短い期限の User/App Token は、だいたい普通の OAuth 2.0 の話。 その他の部分を以下に書く

無期限の App Access Token

Facebook アプリの App ID と App Secret を | でつないだものは App Access Token として使用できる。 App Secret は(意図的に変えない限り)変わらないのでもちろん無期限になる

App Access Token ではユーザーの個人データにはアクセスできないが、server-to-server call で公開情報を取得するのであれば使用できる (たとえば Facebook Page の public feed を取得する など)

長い期限の User Access Token の取得

まず、ふつうの(短い期限の)User Access Token を取得しておく。 そのトークンを使って再度、grant_type=fb_exchange_token として /oauth/access_token をたたくと、長い期限のトークンを取得できる。

https://graph.facebook.com/oauth/access_token?grant_type=fb_exchange_token&client_id={app_id}&client_secret={app_secret}&fb_exchange_token={token}

App Secret を含むため server-to-server call が必須であることに注意

短い期限の Page Access Token の取得

無期限トークンの前に、短い期限のほうを取得する方法について

Page Access Token を取得するためには、そのページの管理者であるユーザーの User Access Token が必要。 scope に manage_pages を含んだトークンを取得する

その User Access Token を access_token として、Graph API の /me/accounts エンドポイントをたたくと、 管理しているページの一覧と、その Page Access Token が取得できる

https://graph.facebook.com/v2.5/me/accounts?access_token={token}

https://developers.facebook.com/tools/explorer/?method=GET&path=me%2Faccounts&version=v2.5

無期限の Page Access Token の取得

長い期限の User Access Token を使用して取得した Page Access Token は、無期限になる