アクセストークンは不透明型の文字列で、ユーザー、アプリ、ページを識別します。アプリではアクセストークンを使用してグラフAPI呼び出しが行われます。アクセストークンには、有効期限と生成元のアプリに関する情報が含まれています。プライバシーをチェックするために、MetaアプリでのほとんどのAPI呼び出しには、アクセストークンを含める必要があります。異なるユースケースをサポートするさまざまな種類のアクセストークンがあり、アクセストークンを取得する方法もいくつかあります。
アクセストークンの種類 | 説明 |
---|---|
アプリアクセストークンは、アプリの設定の読み取りや変更に使われます。Meta app secretを使って生成され、アプリ全体の設定を変更する呼び出しを行う際に使われます。アプリアクセストークンは、サーバー間呼び出しを介して取得できます。 | |
クライアントトークンは、アプリレベルのAPIにアクセスする際に使用します。アプリを識別するためにネイティブアプリやデスクトップアプリに埋め込むことができます。クライアントトークンはアプリに埋め込まれるため、シークレット識別子になることはできません。クライアントトークンは、Metaアプリダッシュボードで確認できます。 | |
ページアクセストークンは、Facebookページに属するデータの読み取り、書き込み、修正に使用されます。ページアクセストークンを取得するには、まずユーザーアクセストークンを取得し、そのユーザーアクセストークンを使って、グラフAPIでページアクセストークンを取得します。 | |
システムユーザーアクセストークンは、アプリユーザーからの入力に頼ることなくビジネスクライアントの広告オブジェクトやページでプログラムによる自動化されたアクションを実行する場合や、将来再認証が必要な場合に使用します。 | |
ユーザーアクセストークンは、アプリがユーザーからの入力に基づいてリアルタイムでアクションを実行する場合に使用します。このアクセストークンは、アプリがAPIを呼び出して、特定の利用者の代わりに利用者のFacebookデータの読み取り、変更、書き込みを行う際に必ず必要になります。ユーザーアクセストークンは一般的にログインダイアログを介して取得され、アプリがトークンを取得することを利用者が許可する必要があります。 |
各プラットフォームではそれぞれの個別APIでアクセストークンを生成しますが、ユーザートークンを取得するための基本的な手順はすべてのプラットフォームで共通です。
ユーザーアクセストークンには、短期トークンと長期トークンの2種類があります。短期トークンは通常、1時間または2時間の有効期限を持ちます。一方、長期トークンは通常、約60日の有効期限を持ちます。有効期限は変更されないとは限りません。有効期限は、警告なしに変更され、早期に期限切れとなることがあります。詳しくは、エラー処理の説明をご覧ください。
ウェブログインで生成されるアクセストークンは短期トークンですが、app secretを使用してサーバー側のAPI呼び出しを実行すれば長期トークンに変換できます。
FacebookのiOS SDKとAndroid SDKを使用するモバイルアプリは、デフォルトで長期トークンを取得します。
FacebookのマーケティングAPIに標準アクセスするアプリが長期トークンを使用する場合、有効期限のない長期トークンを受け取ります。これらのトークンも他の理由によって無効になることがありますが、時間のみを基準として有効期限切れとなることはありません。このルールは、ビジネスマネージャのシステムユーザーのアクセストークンにも当てはまります。
アクセストークンを理解する際の重要な特徴の1つは、ほとんどのトークンが移植可能であることです。しかし、Appleはトークンをサーバーに移動することを許可していません。それ以外の場合は、アクセストークンを取得したら、それを使用して、モバイルクライアントやウェブブラウザーからの呼び出し、またサーバーからFacebookのサーバーへの呼び出しを行うことができます。クライアントで取得したトークンをサーバーに送り返して、サーバー間呼び出しで使用できます。サーバー呼び出しを通して取得したトークンをクライアントに送信し、クライアントから呼び出しを行うこともできます。
クライアントとサーバー間でトークンを移動する場合は、利用者のアカウントのセキュリティを確保するために、HTTPSを通じて安全に処理する必要があります。クライアントとサーバー間でのトークンの移動についての関連事項をご覧ください。
プラットフォームによってこのプロセスを開始するための方法は異なり、開発者やアクセス許可を付与する人に代わってアクセストークンを管理する機能があります。
Android用Facebook SDKは、com.facebook.AccessToken
クラスを使用して、ユーザーアクセストークンを自動的に管理します。Android用Facebookログインを実装してユーザーアクセストークンを取得する方法の詳細をご覧ください。ユーザーアクセストークンは、Session.getCurrentAccessToken
を検査することによって取得できます。
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); accessToken = AccessToken.getCurrentAccessToken(); }
iOS用Facebook SDKは、FBSDKAccessToken
クラスを使用して、ユーザーアクセストークンを自動的に管理します。iOS用Facebookログインを実装してユーザーアクセストークンを取得する方法の詳細をご覧ください。アクセストークンは、FBSDKAccessToken.currentAccessToken
を検査することによって取得できます。
- (void)viewDidLoad { [super viewDidLoad]; NSString *accessToken = [FBSDKAccessToken currentAccessToken]; }
JavaScript用Facebook SDKは、ユーザーアクセストークンを自動的に取得して、ブラウザーのCookieで保持します。ユーザーアクセストークンは、FB.getAuthResponse
を呼び出すことによって取得できます。この呼び出しの応答内にaccessToken
プロパティが含まれています。
FB.getLoginStatus(function(response) { if (response.status === 'connected') { var accessToken = response.authResponse.accessToken; } } );
完全なコードサンプルについては、FacebookウェブSDKドキュメントをご覧ください。
JavaScript用Facebook SDKを使用せずにウェブアプリを構築する場合、そのドキュメントで概説されている手順でアクセストークンを生成する必要があります。
アプリアクセストークンは、ユーザーではなくアプリの代わりにFacebook APIにリクエストを実行するために使用されます。アプリアクセストークンは、アプリのパラメーターの変更、テストユーザーの作成と管理、アプリのインサイトの読み取りを行うために使用できます。
ユーザーアクセストークンを使用してリクエストして通常アプリに表示されるユーザーデータの中には、アプリアクセストークンでは表示されないものがあります。ユーザーデータを読み取ってアプリ内で使用している場合、アプリアクセストークンではなくユーザーアクセストークンを使用する必要があります。
アプリダッシュボードの詳細設定でアプリがNative/Desktop
に設定されている場合、アプリアクセストークンは安全でないと見なされるため、API呼び出しでは機能しません。これは、ネイティブアプリまたはデスクトップアプリでは、app secretがどこかに埋め込まれているため、そのapp secretを使用して生成されたアプリアクセストークンも安全ではないと想定されるためです。
アプリアクセストークンを生成するには、次のものが必要です。
curl -X GET "https://graph.facebook.com/oauth/access_token ?client_id={your-app-id} &client_secret={your-app-secret} &grant_type=client_credentials"
この呼び出しでは、アプリアクセストークンが返されます。このトークンは、前述のAPI呼び出しを行うために、ユーザーアクセストークンの代わりに使用できます。繰り返しますが、セキュリティ上の理由から、アプリアクセストークンを決してクライアント側のコードにハードコードしないでください。ハードコードすると、ウェブページの読み込みまたはアプリのデコンパイルを行った利用者に、app secretに対する完全なアクセス権が付与され、アプリを変更できるようになります。このことは、ほとんどの場合、アプリアクセストークンはサーバー間呼び出しでのみ使用することを意味します。
注: このリクエストはapp secretを使用するので、クライアント側のコードまたはデコンパイル可能なアプリバイナリでは決して実行しないでください。app secretを誰ともシェアしないようにすることが重要です。このため、このAPI呼び出しは、サーバー側のコードを使用する場合のみ行われるようにする必要があります。
生成されたアプリアクセストークンを使用せずにグラフAPIに呼び出しを行う別の方法があります。呼び出しを行うときに、単にアプリIDとapp secretをaccess_token
パラメーターとして渡す方法です:
curl -i -X GET "https://graph.facebook.com/{api-endpoint}&access_token={your-app_id}|{your-app_secret}"
生成されたアプリアクセストークンを使用するか、それともこの方法を使用するかの選択は、app secretを隠している場所によって異なります。
ページアクセストークンは、Facebookページを管理するグラフAPI呼び出しで使用されます。ページアクセストークンを生成するには、ページの管理者がページへのアクセス許可または必要なアクセス許可をアプリに付与することが必要です。アクセス許可が付与されたら、必要なアクセス許可を含むユーザーアクセストークンを使用して、ページアクセストークンを取得できます。
curl -i -X GET "https://graph.facebook.com/{your-user-id}/accounts?access_token={user-access-token}"
この呼び出しでは、自分が権限を持っているページのリストと、各ページに関する情報(ページカテゴリ、各ページで自分が持つアクセス許可、ページアクセストークンなど)が返されます。
{ "data": [ { "access_token": "EAACEdE...", "category": "Brand", "category_list": [ { "id": "1605186416478696", "name": "Brand" } ], "name": "Ash Cat Page", "id": "1353269864728879", "tasks": [ "ANALYZE", "ADVERTISE", "MODERATE", "CREATE_CONTENT", "MANAGE" ] }, { "access_token": "EAACEdE...", "category": "Pet Groomer", "category_list": [ { "id": "163003840417682", "name": "Pet Groomer" }, { "id": "2632", "name": "Pet" } ], "name": "Unofficial: Tigger the Cat", "id": "1755847768034402", "tasks": [ "ANALYZE", "ADVERTISE", "MODERATE", "CREATE_CONTENT" ] } ] }
ページアクセストークンがあれば、ページの代わりに自分でAPI呼び出しを行うことができます。例えば、利用者のタイムラインではなく、ページに近況アップデートを投稿したり、ページインサイトのデータを読み取ったりすることができます。
ページアクセストークンは、各ページ、管理者、アプリに対して一意です。
2022年初頭にリリースする予定のiOS用とAndroid用のSDK v13.0以降では、グラフAPIに対するすべての呼び出しにクライアントトークンが必要になります。
アプリトークンと同様に、クライアントトークンはユーザーではなくアプリに代わってグラフAPIリクエストを行います。
他のトークンとは異なり、クライアントアクセストークンは単独ではリクエストで使用できず、アプリIDと組み合わせる必要があります。そのためには、トークンをパイプ記号(|
)で区切ってアプリIDの末尾に追加します。
{app-id}|{client-token}
例:
access_token=1234|5678
アプリのクライアントアクセストークンを入手するには、次のようにします。
アクセストークンに保存される情報とそのエンコード方法はFacebookによって変更されるため、すべてのタイプのアクセストークンの長さは時間とともに変化する可能性があります。つまり、時間が経つにつれて長くなったり短くなったりすることが予想されます。アクセストークンを保存する際は、特定の最大サイズを持たない可変長データ型を使用してください。
アクセストークンツールを使用すると、自分が持っているアクセストークンのリストや、各トークンのデバッグ情報を確認できます。