システムユーザーはサーバー呼び出しを指定するため、Facebookログインを利用できません。そのため、アプリのインストールや、標準Facebook OAuthフローによるトークン生成もできません。これらの操作は、API呼び出しを使って行う必要があります。
| タイプ | 有効期限がないアクセストークン | おすすめの有効期限付きのアクセストークン |
|---|---|---|
有効期間 | 有効期限なし | 60日間有効 |
更新が必要ですか? | いいえ | はい |
ユースケースに基づくおすすめ | リークしたアクセストークンによるリスクを許容し、サードパーティアプリによるデータへのオフラインアクセスを可能にしたい。 | リークしたアクセストークンによるリスクを制限したい。 |
アクセストークンの生成に使用するアプリは、システムユーザーまたは管理者システムユーザーがインストールする必要があります。つまり、このシステムユーザーまたは管理者システムユーザーの代わりにアプリがAPIを呼び出せるようにします。
システムユーザーとアプリは、いずれも同じビジネスマネージャに属している必要があります。広告管理APIの標準アクセス以上を持つアプリのみをインストールできます。
システムユーザーに代わってアプリをインストールするには、次が必要です。
access_token: 管理者ユーザー、管理者システムユーザー、別のシステムユーザーのいずれかのアクセストークンbusiness_app: インストールされているアプリのIDシステムユーザーに代わってアプリをインストールするには、次のPOSTリクエストを実行します。
curl \ -F "business_app=APP-ID" \ -F "access_token=ACCESS-TOKEN" \ "https://graph.facebook.com/API-VERSION/SYSTEM-USER-ID/applications"
インストールが成功すると、この呼び出しでbooleanの結果が返されます。いずれかの条件が満たされていない場合、内容に応じたエラーメッセージが表示されます。
システムユーザーは、アプリをインストールすると、長期アクセストークンを生成できます。ただし、次のような制限があります。
API呼び出しのパラメーターは以下のとおりです。
business_app: システムユーザーが属するビジネスマネージャが所有するアプリ。appsecret_proof: アプリの算出されたフィールド。これは、正しいサーバーがAPI呼び出しを実行していることを確認するために必要です。詳しくは、ログインのセキュリティをご確認ください。scope: 拡張アクセス許可を含む、コンマで区切られた文字列。access_token: ビジネスマネージャ管理者、管理者システムユーザー、一般システムユーザーのいずれかに属するトークン。set_token_expires_in_60_days: trueに設定すると、有効期限付きのシステムユーザーアクセストークンが生成される。推奨。有効期限付きのトークンの使用は、セキュリティ上のベストプラクティスです。ビジネスによっては、有効期限付きのトークンの使用が必須になります。この要件がビジネスに適用される場合、このパラメーターを省略するか、falseに設定するとエラーが発生します。すべての統合で、進化するプラットフォームのセキュリティ基準に合わせて有効期限付きのトークンを採用する必要があります。システムユーザーに対してサポートされているスコープ:
ads_managementads_readattribution_readbusiness_managementcatalog_managementcommerce_account_manage_orderscommerce_account_read_orderscommerce_account_read_settingsinstagram_basicinstagram_branded_content_ads_brandinstagram_branded_content_brandinstagram_content_publishinstagram_manage_commentsinstagram_manage_insightsinstagram_manage_messagesinstagram_shopping_tag_productsleads_retrievalpage_eventspages_manage_adspages_manage_ctapages_manage_engagementpages_manage_instant_articlespages_manage_metadatapages_manage_postspages_messagingpages_read_engagementpages_read_user_contentpages_show_listprivate_computation_accesspublish_videoread_audience_network_insightsread_insightsread_page_mailboxeswhatsapp_business_managementwhatsapp_business_messaging廃止されたアクセス許可(2018年4月24日より前に作成されたアプリにのみ表示)
publish_actions
機能でゲート管理されたアクセス許可
| 機能 | アクセス許可 |
|---|---|
business_creative_asset_management |
|
commerce_public_api_beta_testing |
|
appsecret_proofを生成する場合、次のPHPコードを使うことができます。
$appsecret_proof = hash_hmac( 'sha256', $access_token_used_in_the_call, $app_secret_for_the_app_used_in_the_call, );
上記のコードサンプルでは、app_secret_for_the_app_used_in_the_callはアクセストークンの作成に使用されたアプリのapp secretを指します。app secretはアプリダッシュボードで確認できます。
ハッシュ化されたappsecret_proofは"1734d0d1e1ca62c9762c10bbc7321fdf89ecc7d819312b2f3"のような文字列になります。
永続的なシステムユーザーアクセストークンを生成するには、次のようなPOSTリクエストを実行します。
curl \ -F "business_app=<APP_ID>" \ -F "scope=ads_management,pages_read_engagement,pages_show_list" \ -F "appsecret_proof=APPSECRET-PROOF" \ -F "access_token=ACCESS-TOKEN" \ "https://graph.facebook.com/API-VERSION/SYSTEM-USER-ID/access_tokens"
有効期限付きのシステムユーザーアクセストークンを生成するには、次のようなPOSTリクエストを実行します。
curl \ -F "business_app=<APP_ID>" \ -F "scope=ads_management,pages_read_engagement,pages_show_list" \ -F "set_token_expires_in_60_days=true" \ -F "appsecret_proof=APPSECRET-PROOF" \ -F "access_token=ACCESS-TOKEN" \ "https://graph.facebook.com/API-VERSION/SYSTEM-USER-ID/access_tokens"
このエンドポイントは、以前は /SYSTEM-USER-ID/ads_access_tokenという名前でした。この名前への呼び出しは無効になりました。
アクセストークンの文字列が返されます。いずれかの条件が満たされていない場合、内容に応じたエラーコードがスローされます。応答は次のようになります。
{
"access_token": "CAAB3rQQzTFABANaYYCmOuLhbC]Fu8cAnmkcvT0ZBIDNm1d1fSp4Eg4XA79gmYumZCoSuiMSUILUjzG3y15BJlrYwXdqwd5c7y3lOUzu6aT7MkXL6HpISksSuLP4aFKWPmwb6iOgGeugRSn766xMZCN72vTiGGLUNqC2MKRL"
}ビジネスマネージャUIを使用してシステムユーザーアクセストークンを生成することもできます。
有効期限付きのシステムユーザーアクセストークンは、生成日または更新日から60日間有効です。開発者が60日以内にこのアクセストークンを更新すれば、継続させることができます。更新しなかった場合はアクセストークンが消失するので、開発者は新しいアクセストークンを取得して、APIアクセスをもう一度獲得する必要があります。
有効期限付きのシステムユーザーアクセストークンを更新するには、以下が必要です。
fb_exchange_token: 有効なシステムユーザーアクセストークンclient_id: アプリIDclient_secret: app secretset_token_expires_in_60_days: trueに設定すると、有効期限付きのシステムユーザーアクセストークンが更新されます。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}&
set_token_expires_in_60_days=true&
fb_exchange_token={your-access-token}"応答の例
{
"access_token":"{expiring-system-user-access-token}",
"token_type": "bearer",
"expires_in": 5183944 // Time left in seconds until the token expires
}このエンドポイントは、システムを保護する手段として、定期的なトークンのローテーションを実行したり、侵害されたシステムユーザーのアクセストークンを取り消したりするためのものです。
システムユーザーアクセストークンを取り消すには、以下が必要です。
revoke_token: 取り消すアクセストークン
client_id: アプリID
client_secret: app secret
access_token: 呼び出し元を識別するためのアクセストークン
その要件は以下のとおりです。
client_idは実際のアプリに対応しており、そのアプリは調整、無効化、または削除されていてはなりません。
revoke_tokenのインストール済みアプリ、access_tokenのインストール済みアプリ、client_secretのclient_idは、すべて同じでなければなりません。
GET oauth/revokeエンドポイントをクエリします。
リクエストの例
curl -i -X GET "https://graph.facebook.com/{graph-api-version}/oauth/revoke?
client_id={app-id}&
client_secret={app-secret}&
revoke_token={system-user-access-token-to-revoke}&
access_token={your-access-token}"応答の例
{
"success":"true",
}トークンのローテーションは、トークンの漏洩による被害を減らすなど、リスクを軽減するのに役立つセキュリティ対策です。アクセストークンを定期的に変更することで、パスワードを変更する場合と同様に、トークンの漏洩や間違った入力で生じ得る損害を少なくすることができます。現在、Metaのシステムでは、ダウンタイムなしのシステムユーザーのローテーションをサポートしています。ローテーションを行うには、次の指示を実行します。
Refresh APIを使用してシステムユーザーアクセストークンを更新します。Refresh APIは、新しいシステムユーザーアクセストークンを返します。新しいトークンは更新日から60日間有効です。古いアクセストークンは、有効期限が切れるまで(つまり作成日から60日間)は引き続き使用できます。
新しいシステムユーザーアクセストークンをデプロイします。
Revocation APIを使用して、古いシステムユーザーアクセストークンを取り消します。無効化はすぐに行われ、取り消し後にトークンを再度使用することはできません。