システムユーザーはサーバー呼び出しを指定するため、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に設定すると、有効期限付きのシステムユーザーアクセストークンが生成される。任意。システムユーザーに対してサポートされているスコープ:
ads_management
ads_read
attribution_read
business_management
catalog_management
commerce_account_manage_orders
commerce_account_read_orders
commerce_account_read_settings
instagram_basic
instagram_branded_content_ads_brand
instagram_branded_content_brand
instagram_content_publish
instagram_manage_comments
instagram_manage_insights
instagram_manage_messages
instagram_shopping_tag_products
leads_retrieval
page_events
pages_manage_ads
pages_manage_cta
pages_manage_engagement
pages_manage_instant_articles
pages_manage_metadata
pages_manage_posts
pages_messaging
pages_read_engagement
pages_read_user_content
pages_show_list
private_computation_access
publish_video
read_audience_network_insights
read_insights
read_page_mailboxes
whatsapp_business_management
whatsapp_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,manage_pages" \ -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,manage_pages" \ -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のシステムでは、ダウンタイムなしのシステムユーザーのローテーションをサポートしています。ローテーションを行うには、次の指示を実行します。
SUAT更新APIを使用してシステムユーザーアクセストークンを更新します。SUAT更新APIは、新しいシステムユーザーアクセストークンを返します。この新しいトークンは更新された日から60日間有効です。古いトークンは、有効期限が切れる(作成日から60日間)まで引き続き使用できます。
新しいシステムユーザーアクセストークンを導入します。
SUAT取り消しAPIを使用して、古いシステムユーザーアクセストークンを取り消します。無効化はすぐに行われ、取り消し後にトークンを再度使用することはできません。