アクセストークン

利用者がFacebookログインを使用してアプリに接続すると、そのアプリはアクセストークンを取得できます。これにより、アプリは一時的に、セキュアな方法でFacebook APIを利用できます。

アクセストークンはOpaque (不透明型)文字列で、利用者、アプリ、ページを識別します。アプリではアクセストークンを使用してグラフAPI呼び出しが行われます。 アクセストークンは、さまざまな方法を通して取得できます。それぞれの方法については、このドキュメントで後ほど説明されます。 アクセストークンには、有効期限切れとなる日時と、生成したアプリについての情報が含まれます。プライバシーをチェックするために、FacebookでのほとんどのAPI呼び出しは、アクセストークンを含む必要があります。さまざまな使用状況をサポートするために、さまざまな種類のアクセストークンがあります。

アクセストークンの種類 説明

ユーザーアクセストークン

ユーザートークンは、最も一般的に使用される種類のトークンです。 この種類のアクセストークンは、アプリがAPIを呼び出して、特定の利用者のFacebookデータをその利用者の代わりに読み取り、変更、書き込みを行う際には常に必要になります。 ユーザーアクセストークンは、一般的にログインダイアログを通して取得され、アプリが取得するのを利用者が許可する必要があります

アプリアクセストークン

この種類のアクセストークンは、アプリ設定を変更したり読み取ったりする際に必要になります。また、Open Graph actionを公開するためにも使用できます。 アプリアクセストークンは、アプリとFacebookとの間で事前に合意されたapp secretを使用して生成され、アプリ全体の設定を変更する呼び出しで使用されます。 アプリアクセストークンは、サーバー間呼び出しを通して取得します

ページアクセストークン

これらのアクセストークンはユーザーアクセストークンに似ていますが、Facebookページに属するデータの読み取り、書き込み、変更を行うAPIに対してアクセス許可を提供する点が異なります。 ページアクセストークンを取得するには、まずユーザーアクセストークンを取得してから、manage_pagesアクセス許可をリクエストする必要があります。 ユーザーアクセストークンを取得したら、グラフAPIを介してページアクセストークンを取得します

クライアントトークン

クライアントトークンは、アプリを識別するために、ネイティブモバイルバイナリやデスクトップアプリに埋め込むことができる識別子です。 クライアントトークンは、アプリに埋め込まれるため、シークレット識別子になることはできません。 クライアントトークンは、アプリレベルの非常に限られたサブセットのAPIにアクセスするために使用されます。クライアントトークンは、アプリのダッシュボードに表示されます。クライアントトークンはほとんど使用されることがないため、このドキュメントでは説明を省略しますが、 クライアントトークンを使用するAPIドキュメントのいずれにも説明があります。

アクセストークンの生成

- ユーザーアクセストークン

- アプリアクセストークン

- ページアクセストークン


ユーザーアクセストークン

各プラットフォームではそれぞれの個別APIでアクセストークンを生成しますが、ユーザートークンを取得するための基本的な手順はすべてのプラットフォームで共通です。

プラットフォームごとにこのプロセスを開始するための異なる方法があり、開発者や許可を付与する利用者に代わってアクセストークンを管理する機能も用意されています。

JavaScript

JavaScript用Facebook SDKは、ユーザーアクセストークンを自動的に取得して、ブラウザのCookieに保持します。FB.getAuthResponseを呼び出すことによってユーザーアクセストークンを取得できます。この場合、応答内にaccessTokenプロパティが含まれます。

Android

Android用Facebook SDKでは、com.facebook.AccessTokenクラスを使用して、ユーザーアクセストークンを自動的に管理します。Android用Facebookログインを実装すると、ユーザーアクセストークンの取得に関する詳細をご確認いただけます。ユーザーアクセストークンは、Session.getCurrentAccessTokenを検査することによって取得できます。

iOS

iOS用Facebook SDKでは、FBSDKAccessTokenクラスを使用して、ユーザーアクセストークンを自動的に管理します。iOS用Facebookログインを実装すると、ユーザーアクセストークンの取得に関する詳細をご確認いただけます。アクセストークンは、FBSDKAccessToken.currentAccessTokenを検査することによって取得できます。

ウェブ(JavaScriptなし)

JavaScript用Facebook SDKを使用せずにウェブ上でアプリを構築する場合、そのドキュメントで説明されている手順でアクセストークンを生成する必要があります。

コードサンプル

Android

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    FacebookSdk.sdkInitialize(this.getApplicationContext());
    accessToken = AccessToken.getCurrentAccessToken();
}

iOS

- (void)viewDidLoad
{
  [super viewDidLoad];
  NSString *accessToken = [FBSDKAccessToken currentAccessToken];
}

JavaScript (ウェブ)

FB.getLoginStatus(function(response) {
  if (response.status === 'connected') {
    var accessToken = response.authResponse.accessToken;
  } 
} );

短期トークンと長期トークン

ユーザーアクセストークンには、短期トークンと長期トークンの2種類があります。 短期トークンは通常、1時間または2時間の有効期限を持ちます。一方、長期トークンは通常、約60日の有効期限を持ちます。 有効期限は変更されないということを前提にしないでください。有効期限は、警告なしに変更され、早期に期限切れとなることがあります。 詳しくは、エラー処理の説明をご覧ください。

ウェブログインで生成されるアクセストークンは短期トークンですが、app secretを使用してサーバー側のAPI呼び出しを実行すれば長期トークンに変換できます。

FacebookのiOS SDKとAndroid SDKを使用するモバイルアプリは、デフォルトで長期トークンを取得します。

FacebookのマーケティングAPIに標準アクセスするアプリが長期トークンを使用する場合、有効期限のない長期トークンを受け取ります。これらのトークンも他の理由によって無効になることがありますが、時間のみを基準として有効期限切れとなることはありません。このルールは、ビジネスマネージャのシステムユーザーにもあてはまります。

トークンは可搬的

アクセストークンを理解する際の重要な特徴の1つとして、可搬性があります。 アクセストークンを取得したら、それを使用して、モバイルクライアントやウェブブラウザからの呼び出し、またサーバーからFacebookのサーバーへの呼び出しを行うことができます。 クライアントで取得したトークンをサーバーに送り返して、サーバー間呼び出しで使用できます。 サーバー呼び出しを通して取得したトークンをクライアントに送信し、クライアントから呼び出しを行うこともできます。

クライアントとサーバー間でトークンを移動する場合は、利用者のアカウントのセキュリティを確保するために、HTTPSを通じて安全に処理する必要があります。クライアントとサーバー間でのトークンの移動についての関連事項をご覧ください

アプリアクセストークン

アプリアクセストークンは、利用者ではなくアプリの代わりにFacebook APIにリクエストするために使用されます。アプリアクセストークンは、アプリのパラメータの変更、テストユーザーの作成と管理、アプリのインサイトの読み取りを行うために使用できます。

制約

ユーザーアクセストークンを使用してアプリからリクエストを行うと通常はアクセスできるユーザーデータの中には、アプリアクセストークンを使用するとアクセスできないものがあります。ユーザーデータを読み取ってアプリ内で使用する場合、アプリアクセストークンの代わりにユーザーアクセストークンを使用する必要があります。

アプリダッシュボードの[詳細]設定でアプリがNative/Desktopに設定されていると、アプリアクセストークンは安全ではないと見なされるため、API呼び出しを行うことはできません。これは、ネイティブアプリまたはデスクトップアプリでは、app secretがどこかに埋め込まれているため、そのapp secretを使用して生成されたアプリアクセストークンも安全ではないと想定されるためです。

アプリアクセストークンの生成

アプリアクセストークンを生成するには、グラフAPI呼び出しを行う必要があります。

GET /oauth/access_token
    ?client_id={app-id}
    &client_secret={app-secret}
    &grant_type=client_credentials

この呼び出しでは、アプリアクセストークンが返されます。このトークンは、前述のAPI呼び出しを行うために、ユーザーアクセストークンの代わりに使用できます。繰り返しますが、セキュリティ上の理由から、アプリアクセストークンを決してクライアント側のコードにハードコードしないでください。ハードコードすると、ウェブページを読み取ったりアプリをデコンパイルしたりした利用者に、app secretに対する完全なアクセス権が付与され、結果としてアプリが変更される可能性があります。 このことは、ほとんどの場合、アプリアクセストークンはサーバー間呼び出しでのみ使用することを意味します。

注: このリクエストはapp secretを使用しますので、クライアント側のコードまたはデコンパイル可能なアプリバイナリに決して行わないようにしてください。app secretは、誰ともシェアしないようにすることが重要です。このため、このAPI呼び出しは、サーバー側のコードを使用する場合のみ行われるようにする必要があります。

生成されたアプリアクセストークンを使用せずにグラフAPIを呼び出すこともできます。 呼び出しを行うときに、アプリIDとapp secretをaccess_tokenパラメータとして渡すだけです。

https://graph.facebook.com/endpoint?key=value&access_token=app_id|app_secret

生成されたアプリアクセストークンを使用するか、この方法を使用するかの選択は、app secretを隠す場所に依存します。

ページアクセストークン

ページアクセストークンは、Facebookページを管理するためにグラフAPI呼び出しで使用されます。ページアクセストークンを生成するには、ページの管理者がmanage_pagesと呼ばれる拡張アクセス許可を付与する必要があります。このアクセス許可が付与されると、必要なアクセス許可を持つユーザーアクセストークンと次のグラフAPIリクエストを使用して、ページアクセストークンを取得できます。

GET /me/accounts HTTP/1.1
Host: graph.facebook.com

この呼び出しでは、その利用者が管理するページの一覧が、ページに関する追加情報(ページカテゴリや管理者がそのページに対して所有する許可、ページアクセストークンなど)とともに返されます。

{
  "data": [
    {
      "category": "Product/service",
      "name": "Sample Page",
      "access_token": "{access-token}",
      "id": "1234567890",
      "perms": [
        "ADMINISTER",
        "EDIT_PROFILE",
        "CREATE_CONTENT",
        "MODERATE_CONTENT",
        "CREATE_ADS",
        "BASIC_ADMIN"
      ]
    }, 
}

ページアクセストークンを使えば、ページの代わりにAPI呼び出しを行うことができます。たとえば、利用者のタイムラインではなくページに近況アップデートを投稿したり、ページインサイトのデータを読み取ったりすることができます。

ページアクセストークンは、ページ、管理者、アプリに対して固有です。

ページ管理者は、それぞれに異なる役割を持ち、その役割は前述の呼び出しで返されるperms配列によって示されます。役割ごとに利用可能な機能は、perms値に基づいて決定されます。詳しくは、「トークンと役割」をご覧ください。