アクセストークン

アクセストークンは不透明型文字列で、ユーザー、アプリ、ページを識別します。アプリではアクセストークンを使用してグラフAPI呼び出しが行われます。だれかがFacebookログインを使用してアプリに接続し、アクセス許可のリクエストを承認すると、そのアプリはアクセストークンを取得できます。これにより、アプリは一時的に、セキュアな方法でFacebook APIを利用できます。アクセストークンは、さまざまな方法を通して取得できます。

グラフAPI v4.0で加えられた変更により、ユーザーアクセストークンのごく一部が無効になりました。これらのトークンを使用して行われるAPIリクエストはすべて失敗します。影響があるアプリをお持ちの場合、開発者アラートが送信されています。使用しているユーザーアクセストークンに影響があるかどうかについては、/token_deprecation_checkエンドポイントに対してクエリを実行して確認してください。アクセストークンが無効になっているユーザーは再認証する必要があります。この変更は、2019年10月29日のすべてのバージョンに影響があります。詳しくは、グラフAPIの更新履歴をご覧ください。

アクセストークンには、有効期限と、生成元アプリについての情報が含まれます。プライバシーをチェックするために、FacebookでのほとんどのAPI呼び出しは、アクセストークンを含む必要があります。さまざまな使用状況をサポートするために、さまざまな種類のアクセストークンがあります。

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

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

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

アプリアクセストークン

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

ページアクセストークン

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

クライアントトークン

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

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

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

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

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

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

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

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

トークンは移植可能

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

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

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

Android

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

サンプルコード

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

iOS

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

サンプルコード

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

JavaScript

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

サンプルコード

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

完全なコードサンプルについては、FacebookウェブSDKドキュメントをご覧ください。

ウェブ(JavaScriptなし)

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呼び出しを行うことができます。たとえば、利用者のタイムラインではなく、ページに近況アップデートを投稿したり、ページインサイトのデータを読み取ったりすることができます。

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

アクセストークンの長さ

アクセストークンに保存される情報とそのエンコード方法はFacebookによって変更されるため、すべてのタイプのアクセストークンの長さは時間とともに変化する可能性があります。つまり、時間が経つにつれて長くなったり短くなったりすることが予想されます。アクセストークンを保存する際は、特定の最大サイズを持たない可変長データ型を使用してください。

詳しくはこちら