この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:7
ページ更新者:T
更新日時:2026-06-11 07:12:00

タイトル: アプリケーションの登録のトークンの取得
SEOタイトル: Facebook (Meta) Graph API トークン取得完全ガイド (App ID / Long-Lived / Page Token)

この記事の要点
  • Meta for Developers でアプリ登録 → App ID / App Secret を取得
  • Graph API Explorer で短命 (1 時間) User Access Token を即時発行
  • 本番では OAuth 2.0 認可フロー + Long-Lived Token (60 日有効) に交換
  • ページ管理は Page Access Token、サーバ間は App Access Token
  • App Review 通過 = ユーザー個人スコープを超える権限取得に必須 (publish_to_pages, ads_management 等)

用語整理: トークンの種類

トークン種別用途有効期限
User Access Token (短命)ユーザーの代理操作 (テスト用)約 1〜2 時間
User Access Token (長命)ユーザー代理の本番運用約 60 日
Page Access Token (短命)ページ管理約 1〜2 時間
Page Access Token (長命)ページ自動投稿等無期限 (長命ユーザートークン経由で取得時)
App Access Tokenサーバ間通信、Token DebuggerApp Secret 変更まで
Client Tokenクライアント側 (モバイル等) で App ID 補強App Secret 変更まで

ステップ 1: Meta for Developers でアプリ登録

  1. https://developers.facebook.com/ にログイン (Facebook アカウント必須)
  2. 右上 My AppsCreate App
  3. ユースケース選択 (Other → Consumer / Business 等)
  4. アプリ名・連絡先メール入力
  5. 作成後のDashboardApp IDApp Secret を確認
ダッシュボードに表示される値:

App ID:       1234567890123456
App Secret:   abcdef1234567890abcdef1234567890   ← クリックで表示

App Secret は ★絶対に公開しない★
- Git にコミットしない
- フロントエンドに埋め込まない
- サーバ環境変数で管理

ステップ 2: Graph API Explorer で即席トークン取得

テスト用に最速でトークン取得するなら Graph API Explorer が便利:

  1. Graph API Explorer を開く
  2. 右上 Meta App で対象アプリを選択
  3. User or Page ドロップダウンで Get User Access Token
  4. 必要な Permissions をチェック (例: email, public_profile, pages_read_engagement)
  5. Generate Access Token ボタン → 認可ダイアログ → コピー

このトークンは短命 (1〜2 時間)。長命化はステップ 4 で行います。

ステップ 3: 本番用 OAuth フロー

エンドユーザーがログインするウェブアプリでは、サーバ側で OAuth 2.0 フローを実装します:

[認可コードフロー]

(1) ユーザーをブラウザでリダイレクト
   https://www.facebook.com/v18.0/dialog/oauth?
       client_id=APP_ID
       &redirect_uri=https://yourapp.com/callback
       &state=RANDOM_CSRF_TOKEN
       &scope=email,public_profile,pages_read_engagement

(2) ユーザーが承認 → コールバック URL に code パラメータ付きで戻る
   https://yourapp.com/callback?code=AUTH_CODE&state=...

(3) サーバから code を Access Token に交換 (App Secret 必要)
   GET https://graph.facebook.com/v18.0/oauth/access_token?
       client_id=APP_ID
       &client_secret=APP_SECRET
       &redirect_uri=https://yourapp.com/callback
       &code=AUTH_CODE

(4) レスポンス:
   {
     "access_token": "EAAxxxx...",
     "token_type": "bearer",
     "expires_in": 5183944
   }

PHP サンプル

<?php
$appId     = getenv('FB_APP_ID');
$appSecret = getenv('FB_APP_SECRET');
$redirect  = 'https://yourapp.com/callback';

// 1) ログイン URL を生成
$state = bin2hex(random_bytes(16));
$_SESSION['fb_state'] = $state;

$loginUrl = 'https://www.facebook.com/v18.0/dialog/oauth?' . http_build_query([
    'client_id'     => $appId,
    'redirect_uri'  => $redirect,
    'state'         => $state,
    'scope'         => 'email,public_profile',
]);
header("Location: $loginUrl");
exit;

// 2) コールバック側 (別エンドポイント)
if ($_GET['state'] !== $_SESSION['fb_state']) {
    die('CSRF mismatch');
}

$response = file_get_contents(
    'https://graph.facebook.com/v18.0/oauth/access_token?' . http_build_query([
        'client_id'     => $appId,
        'client_secret' => $appSecret,
        'redirect_uri'  => $redirect,
        'code'          => $_GET['code'],
    ])
);
$token = json_decode($response)->access_token;

ステップ 4: Long-Lived Token に交換

短命 (1〜2 時間) を長命 (60 日) に交換します:

curl -G \
  -d &quot;grant_type=fb_exchange_token&quot; \
  -d &quot;client_id=APP_ID&quot; \
  -d &quot;client_secret=APP_SECRET&quot; \
  -d &quot;fb_exchange_token=SHORT_LIVED_TOKEN&quot; \
  https://graph.facebook.com/v18.0/oauth/access_token

# レスポンス:
# {
#   &quot;access_token&quot;: &quot;EAAxxxxxLONG&quot;,
#   &quot;token_type&quot;: &quot;bearer&quot;,
#   &quot;expires_in&quot;: 5183944    ← 60 日 (秒)
# }

Page Access Token の取得

Facebook ページ (Page) を管理するには、長命ユーザートークン経由で Page Access Token を取得します:

# 自分が管理するページ一覧を取得 (長命ユーザートークンが必要)
curl &quot;https://graph.facebook.com/v18.0/me/accounts?access_token=LONG_USER_TOKEN&quot;

# レスポンス:
# {
#   &quot;data&quot;: [
#     {
#       &quot;access_token&quot;: &quot;EAAxxx...&quot;,   ← ★ Page Access Token (無期限)
#       &quot;category&quot;: &quot;Education&quot;,
#       &quot;name&quot;: &quot;My Page&quot;,
#       &quot;id&quot;: &quot;1234567890&quot;,
#       &quot;tasks&quot;: [&quot;ANALYZE&quot;, &quot;ADVERTISE&quot;, &quot;MESSAGING&quot;, &quot;MODERATE&quot;, &quot;CREATE_CONTENT&quot;, &quot;MANAGE&quot;]
#     }
#   ]
# }

長命ユーザートークンを経由して取得した Page Access Token は無期限です (アカウントがパスワード変更等で再認証要求しない限り)。

App Access Token

ユーザー操作不要のサーバ間通信 (Token Debugger 呼出、Webhook 検証等) では App Access Token を使います:

# App Access Token は単純に APP_ID|APP_SECRET (パイプ区切り)
# または取得 API:
curl -G \
  -d &quot;client_id=APP_ID&quot; \
  -d &quot;client_secret=APP_SECRET&quot; \
  -d &quot;grant_type=client_credentials&quot; \
  https://graph.facebook.com/v18.0/oauth/access_token

# 使用例: トークンの検証
curl &quot;https://graph.facebook.com/debug_token?input_token=USER_TOKEN&amp;access_token=APP_TOKEN&quot;

Token Debugger でトークン情報確認

https://developers.facebook.com/tools/debug/accesstoken/

入力するとわかる情報:
- App ID / アプリ名
- Token Type (User / Page / App)
- 有効期限 (Expires)
- Scopes (権限)
- User ID
- Issued At (発行日時)
- Data Access Expires (90 日後)

CLI でも可能:
curl &quot;https://graph.facebook.com/debug_token?
        input_token=TOKEN_TO_CHECK&amp;
        access_token=APP_ACCESS_TOKEN&quot;

App Review (本番公開)

個人用以上の権限 (publish_to_pages, pages_read_user_content, ads_management 等) を使うには App Review 通過が必要です:

  1. ダッシュボード → App ReviewPermissions and Features
  2. 必要な権限を Request
  3. ユースケース説明・スクリーンキャスト動画提出
  4. プライバシーポリシー / 利用規約 URL 設定
  5. Business Verification (ビジネス認証)
  6. Meta による審査 (通常 3〜7 営業日)

Webhook Verify Token

Facebook が POST する Webhook を受ける際は、Verify Token (自分で決めた任意文字列) で初回検証します:

<?php
// Webhook エンドポイント: /webhook/facebook

$verifyToken = getenv('FB_VERIFY_TOKEN');  // 自分で決めた値

if ($_SERVER['REQUEST_METHOD'] === 'GET') {
    // 初回検証
    if (
        ($_GET['hub_mode'] ?? '') === 'subscribe'
        && ($_GET['hub_verify_token'] ?? '') === $verifyToken
    ) {
        echo $_GET['hub_challenge'];
        exit;
    }
    http_response_code(403);
    exit;
}

// 本番イベント受信
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $body = file_get_contents('php://input');

    // X-Hub-Signature-256 で署名検証
    $expected = 'sha256=' . hash_hmac('sha256', $body, getenv('FB_APP_SECRET'));
    $actual = $_SERVER['HTTP_X_HUB_SIGNATURE_256'] ?? '';
    if (!hash_equals($expected, $actual)) {
        http_response_code(401);
        exit;
    }

    $event = json_decode($body, true);
    // 処理...
    http_response_code(200);
}

FAQ

Q: トークンが急に効かなくなった
A: パスワード変更 / 2 段階認証変更 / Meta の権限削除でトークンが無効化されます。Token Debugger で is_valid: false なら再取得。

Q: App Secret をフロントエンドに置いて良い?
A: 絶対 NG。盗まれたら App Access Token を発行されアプリ乗っ取りに繋がります。サーバ環境変数のみ。

Q: 個人開発 / 趣味アプリでも App Review が必要?
A: 自分・テストユーザー範囲なら不要。一般公開して他人のアカウントから使ってもらうなら必要。