安裝應用程式、產生、重新整理及撤銷權杖

因為系統用戶代表伺服器呼叫,所以並未經過 Facebook 登入且無法安裝應用程式,也無法完成 Facebook oAuth 標準流程來產生權杖。您需要透過 API 呼叫來進行以上操作。

系統存取權杖的類型

類型 沒有期限的存取權杖 建議會逾期的存取權杖

終身

永不到期

有效期 60 天

需要重新整理嗎?

根據使用案例的建議

您可以容忍存取權杖洩露的風險,並希望您的第三方應用程式可以離線存取資料。

您希望限制存取權杖洩露的風險。

安裝應用程式

系統用戶或管理員系統用戶必須安裝將用於產生存取權杖的應用程式。這表示須允許應用程式代表此系統用戶或管理員系統用戶來呼叫 API。

系統用戶和應用程式必須隸屬於相同的企業管理平台。只可安裝具備廣告管理 API 標準存取權以上的應用程式。

若要為系統用戶安裝應用程式,您需要以下項目:

  • access_token:管理員用戶、管理員系統用戶或其他系統用戶的存取權杖
  • business_app:要安裝的應用程式編號

若要為系統用戶安裝應用程式,請發出 POST 要求:

curl \
-F "business_app=APP-ID" \
-F "access_token=ACCESS-TOKEN" \
"https://graph.facebook.com/API-VERSION/SYSTEM-USER-ID/applications"

如果安裝成功,此呼叫會傳回布林值結果。若未符合任一限制,您會看到適當的錯誤訊息。

產生存取權杖

系統用戶安裝應用程式後,就可產生持續性存取權杖。必須遵循以下限制:

  • 系統用戶必須已安裝在參數中傳入的應用程式,如以上步驟所示。
  • 應用程式只能鎖定已擁有它們的企業(或這些企業的子企業)。
  • 在此權杖產生 API 呼叫過程中,系統用戶及所用存取權杖的擁有者必須隸屬於相同的企業管理平台。
  • 應用程式不一定得隸屬於相同的企業管理平台。如果不是,則需符合一些限制。請參閱以下內容

以下為此 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

business_creative_managementbusiness_creative_insights
business_creative_insights_sharebusiness_data_management

commerce_public_api_beta_testing

commerce_manage_accountscommerce_account_read_reports

若要產生 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 是用來產生存取權杖之應用程式的應用程式密鑰。您可以在應用程式主控板中查看應用程式密鑰。

經過雜湊處理的 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"
}

您也可以使用企業管理平台用戶介面產生系統用戶存取權杖。

重新整理存取權杖

有期限的系統用戶權杖在產生或重新整理日期後的 60 天內有效。為了建立連續性,開發人員應在 60 天內重新整理存取權杖,否則會導致存取權杖遭撤銷,之後開發人員將需要新權杖才能重新取得 API 存取權限。

若要重新整理有期限的系統用戶存取權杖,您需要:

  • fb_exchange_token:有效的系統用戶存取權杖
  • client_id:應用程式編號
  • client_secret:應用程式密鑰
  • set_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:應用程式編號

  • client_secret:應用程式密鑰

  • access_token:用於識別呼叫者的存取權杖

必備條件如下:

  • client_id 必須與實際應用程式對應,並確保應用未受到限速、停用或刪除。

  • client_id,以及 revoke_token 的已安裝應用程式、access_token 的已安裝應用程式和 client_secret 必須全部相同。

查詢 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",
}

存取權杖輪換

權杖輪換是一種安全措施,可以幫助減輕風險,例如,限制權杖洩露的損害。透過定期變更存取權杖,可以限制權杖洩露或放錯地方造成的潛在損害,就像變更密碼一樣。目前,我們的系統支援不停機的系統用戶輪換。若要這麼做,請依下列指示操作:

  1. 透過 SUAT 重新整理 API 重新整理系統用戶存取權杖。SUAT 重新整理 API 將傳回一個新的系統用戶存取權杖,新權杖自重新整理之日起的 60 天內有效。舊權杖在到期(建立日期加上 60 天)之前仍可使用。

  2. 部署新的系統用戶存取權杖。

  3. 透過 SUAT 撤銷 API 撤銷舊系統用戶存取權杖。權杖將立即失效,且權杖在撤銷後不能再次使用。