Facebook API: 有効期限の長い Access Token を取得する
/me/accounts?access_token={long_lived_token}
Facebook Graph API v2.5
ここに全部書いてある
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 の話。 その他の部分を以下に書く
Facebook アプリの App ID と App Secret を |
でつないだものは App Access Token として使用できる。
App Secret は(意図的に変えない限り)変わらないのでもちろん無期限になる
App Access Token ではユーザーの個人データにはアクセスできないが、server-to-server call で公開情報を取得するのであれば使用できる (たとえば Facebook Page の public feed を取得する など)
まず、ふつうの(短い期限の)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 を取得するためには、そのページの管理者であるユーザーの 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
長い期限の User Access Token を使用して取得した Page Access Token は、無期限になる