タイトル: アプリケーションの登録のトークンの取得
SEOタイトル: Facebook (Meta) Graph API トークン取得完全ガイド (App ID / Long-Lived / Page Token)
| この記事の要点 |
|
用語整理: トークンの種類
| トークン種別 | 用途 | 有効期限 |
|---|---|---|
| User Access Token (短命) | ユーザーの代理操作 (テスト用) | 約 1〜2 時間 |
| User Access Token (長命) | ユーザー代理の本番運用 | 約 60 日 |
| Page Access Token (短命) | ページ管理 | 約 1〜2 時間 |
| Page Access Token (長命) | ページ自動投稿等 | 無期限 (長命ユーザートークン経由で取得時) |
| App Access Token | サーバ間通信、Token Debugger | App Secret 変更まで |
| Client Token | クライアント側 (モバイル等) で App ID 補強 | App Secret 変更まで |
ステップ 1: Meta for Developers でアプリ登録
- https://developers.facebook.com/ にログイン (Facebook アカウント必須)
- 右上 My Apps → Create App
- ユースケース選択 (Other → Consumer / Business 等)
- アプリ名・連絡先メール入力
- 作成後のDashboardで App ID と App Secret を確認
ダッシュボードに表示される値:
App ID: 1234567890123456
App Secret: abcdef1234567890abcdef1234567890 ← クリックで表示
App Secret は ★絶対に公開しない★
- Git にコミットしない
- フロントエンドに埋め込まない
- サーバ環境変数で管理
ステップ 2: Graph API Explorer で即席トークン取得
テスト用に最速でトークン取得するなら Graph API Explorer が便利:
- Graph API Explorer を開く
- 右上 Meta App で対象アプリを選択
- User or Page ドロップダウンで Get User Access Token
- 必要な Permissions をチェック (例:
email,public_profile,pages_read_engagement) - 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 "grant_type=fb_exchange_token" \
-d "client_id=APP_ID" \
-d "client_secret=APP_SECRET" \
-d "fb_exchange_token=SHORT_LIVED_TOKEN" \
https://graph.facebook.com/v18.0/oauth/access_token
# レスポンス:
# {
# "access_token": "EAAxxxxxLONG",
# "token_type": "bearer",
# "expires_in": 5183944 ← 60 日 (秒)
# }
Page Access Token の取得
Facebook ページ (Page) を管理するには、長命ユーザートークン経由で Page Access Token を取得します:
# 自分が管理するページ一覧を取得 (長命ユーザートークンが必要)
curl "https://graph.facebook.com/v18.0/me/accounts?access_token=LONG_USER_TOKEN"
# レスポンス:
# {
# "data": [
# {
# "access_token": "EAAxxx...", ← ★ Page Access Token (無期限)
# "category": "Education",
# "name": "My Page",
# "id": "1234567890",
# "tasks": ["ANALYZE", "ADVERTISE", "MESSAGING", "MODERATE", "CREATE_CONTENT", "MANAGE"]
# }
# ]
# }
長命ユーザートークンを経由して取得した Page Access Token は無期限です (アカウントがパスワード変更等で再認証要求しない限り)。
App Access Token
ユーザー操作不要のサーバ間通信 (Token Debugger 呼出、Webhook 検証等) では App Access Token を使います:
# App Access Token は単純に APP_ID|APP_SECRET (パイプ区切り)
# または取得 API:
curl -G \
-d "client_id=APP_ID" \
-d "client_secret=APP_SECRET" \
-d "grant_type=client_credentials" \
https://graph.facebook.com/v18.0/oauth/access_token
# 使用例: トークンの検証
curl "https://graph.facebook.com/debug_token?input_token=USER_TOKEN&access_token=APP_TOKEN"
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 "https://graph.facebook.com/debug_token?
input_token=TOKEN_TO_CHECK&
access_token=APP_ACCESS_TOKEN"
App Review (本番公開)
個人用以上の権限 (publish_to_pages, pages_read_user_content, ads_management 等) を使うには App Review 通過が必要です:
- ダッシュボード → App Review → Permissions and Features
- 必要な権限を Request
- ユースケース説明・スクリーンキャスト動画提出
- プライバシーポリシー / 利用規約 URL 設定
- Business Verification (ビジネス認証)
- 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: 自分・テストユーザー範囲なら不要。一般公開して他人のアカウントから使ってもらうなら必要。