長期アクセストークン

デフォルトではユーザーアクセストークンとページアクセストークンは短期であり、数時間で有効期限が切れます。しかし、短期アクセストークンは長期アクセストークンに交換できます。

iOS、Android、JavaScript SDKを使用する場合、ユーザーが過去90日以内にアプリを使っていれば、SDKは自動的にトークンを更新します。FacebookのSDKを使用するネイティブモバイルアプリは、約60日間有効な長期ユーザーアクセストークンを取得します。これらのトークンは、アプリを使用する利用者がFacebookのサーバーにリクエストを行うと、1日に1回更新されます。リクエストがまったく行われないと、トークンは約60日後に有効期限切れとなり、新しいトークンを取得するために、利用者はログインフローをやり直す必要があります。

最新のグラフAPIバージョン: v21.0

長期ユーザーアクセストークンの取得

長期ユーザーアクセストークンが必要な場合、短期ユーザーアクセストークンから生成することができます。長期トークンの有効期限は、通常、約60日間です。

次のものが必要です。

  • 有効なユーザーアクセストークン
  • アプリID
  • App Secret

GET oauth/access_tokenエンドポイントをクエリします。

curl -i -X GET "https://graph.facebook.com/{graph-api-version}/oauth/access_token?  
    grant_type=fb_exchange_token&          
    client_id={app-id}&
    client_secret={app-secret}&
    fb_exchange_token={your-access-token}" 

応答の例

{
  "access_token":"{long-lived-user-access-token}",
  "token_type": "bearer",
  "expires_in": 5183944            //The number of seconds until the token expires
}

長期ユーザーアクセストークン生成のワークフローは次のとおりです。

長期トークンを取得したら、そのトークンを自分のサーバーから使用することも、クライアントに送り返してクライアントで使用することもできます。

注意事項

  • 有効期限が切れたトークンを使用して長期トークンをリクエストすることはできません。トークンが有効期限切れとなった場合、アプリでは、利用者にログインフローをやり直してもらい、新しい短期アクセストークンを生成する必要があります。

  • この呼び出しは、クライアントからではなく、お使いのサーバーから発行します。App SecretはこのAPI呼び出しに含まれているため、リクエストをクライアント側で行う必要はありません。代わりに、リクエストを行うサーバー側のコードを実装し、長期トークンを含む応答をクライアント側のコードに送り返します。このトークンは元のトークンとは異なる文字列になる可能性があるため、これらのトークンを格納している場合は、古いトークンを置き換えます。

  • 同じ長期トークンを複数のウェブクライアントで使わないでください(つまり、同じ利用者が複数のコンピューターからログインする場合)。代わりに、サーバー上で長期トークンを使用してコードを生成し、次にそのコードを使用してクライアント上で長期トークンを取得します。サーバー側の長期トークンから長期トークンを生成する方法について詳しくは、以降の説明をご覧ください。

長期ページアクセストークンの取得

長期ページアクセストークンが必要な場合、長期ユーザーアクセストークンから生成することができます。長期ページアクセストークンには有効期限がなく、特定の条件下でのみ有効期限切れや無効になります

次のものが必要です。

GET {app-scoped-user-id}?accountsエンドポイントをクエリします。

curl -i -X GET "https://graph.facebook.com/{graph-api-version}/{app-scoped-user-id}/accounts?
  access_token={long-lived-user-access-token}"

応答の例

{
  "data":[
    {
      "access_token":"{long-lived-page-access-token}",
      "category":"Brand",
      "category_list":[
        {
          "id":"1605186416478696",
          "name":"Brand"
        }
      ],
      "name":"Cute Kitten Page",
      "id":"{page-id}",
      "tasks":[
        "ANALYZE",
        "ADVERTISE",
        "MODERATE",
        "CREATE_CONTENT",
        "MANAGE"
      ]
    }
  ],
  "paging":{
    "cursors":{
      "before":"MTM1MzI2OTg2NDcyODg3OQZDZD",
      "after":"MTM1MzI2OTg2NDcyODg3OQZDZD"
    }
  }
}

クライアント用の長期トークンの取得

Facebookには、アプリで長期アクセストークンを取得して、Facebookの自動スパムシステムの起動を回避するためのオプションが用意されています。次のようなアプリが該当します。

  • 独自の認証システム(例えば、ユーザーネーム/パスワードを使用)が組み込まれている
  • 別のクライアント(ブラウザーまたはネイティブモバイルアプリ)を使用するユーザー用に、Facebookアクセストークンをサーバーに格納する
  • それらのすべての異なるクライアントからAPI呼び出しを行う

次に、クライアントの長期トークンを取得する手順の概要を説明します。

  1. 有効な長期アクセストークンを使用し、サーバーがFacebookからコードを取得するためのリクエストを送信します。
  2. Facebookからサーバーにコードが送り返されるので、このコードをクライアントに安全に送信します。
  3. クライアントはこのコードを使用してFacebookに長期トークンをリクエストします。
  4. Facebookからクライアントに長期トークンが送信されるので、クライアントはそのトークンを使用してストーリーを投稿したりデータをクエリしたりします。

コードの取得

GET oauth/client_codeエンドポイントをクエリします。リダイレクトURIは、アプリダッシュボード[Facebookログイン] > [クライアントの設定] > [OAuth設定]カードで設定した値と正確に一致している必要があります。

curl -i -X GET "https://graph.facebook.com/{graph-api-version}/oauth/client_code?             
    client_id={app-id}&
    client_secret={app-secret}&
    redirect_uri={app-redirect-uri}&
    access_token={long-lived-user-access-token}" 

応答の例

{
  "code":"{code-for-your-client}"
}

コードを長期アクセストークンに交換

Facebookのサーバーからコードを取得したら、セキュアなチャネルを使用して、そのコードをクライアントに送る必要があります。送り終えたら、次のようにクライアントから/oauth/access_tokenエンドポイントにリクエストする必要があります。

curl -i -X GET "https://graph.facebook.com/{graph-api-version}/oauth/access_token?   
    code={code-for-your-client}&
    client_id={app-id}&
    redirect_uri={app-redirect-uri}&
    machine_id= {your-client-machine-id}"

machine_idはクライアントを識別して追跡する任意のパラメーターで、セキュリティとスパム防止のために使われます。これは、クライアントごとの値であり、ユーザーごとの値ではありません。以前に、コードを取得するために呼び出しをしており、machine_idが提供されている場合は、コードリクエストに含めます。

応答の例

{
  "access_token":"{long-lived-access-token}", 
  "expires_in":5183944,           //The number of seconds until the token expires
  "machine_id":"{your-client-machine-id}"
}

長期トークン生成のワークフローは次のとおりです。