Skip to content

Instantly share code, notes, and snippets.

@xl1
Last active August 29, 2023 09:33
Show Gist options
  • Star 21 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save xl1/fe779a817a9d4938193d to your computer and use it in GitHub Desktop.
Save xl1/fe779a817a9d4938193d to your computer and use it in GitHub Desktop.
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 はすでに廃止されている

種類\期限 短い 長い 無期限
User Login Dialog など 以下で説明 ×
App grant_type=client_credentials × {app_id}|{app_secret}
Page Graph 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 は、無期限になる

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment