Meta 技術的存取權杖

存取權杖是一種可辨識用戶、應用程式或粉絲專頁的隱晦字串,可以讓應用程式用來進行圖形 API 呼叫。由權杖中包含的資訊,可得知這個權杖將於何時到期,以及哪個應用程式產生了這個權杖。因為隱私檢查的關係,在 Meta 應用程式上的大多數 API 呼叫都需要包含存取權杖。有不同類型的存取權杖可用來支援不同使用案例,並且有多種用來取得存取權杖的方法。

存取權杖類型說明

應用程式存取權杖

應用程式存取權杖可用來讀取和修改應用程式設定,它是使用 Meta 應用程式密鑰所產生,然後在變更整個應用程式設定的呼叫中使用。您可經由伺服器對伺服器的呼叫取得應用程式存取權杖。

用戶端權杖

用戶端權杖可用來存取應用程式層級 API,您可以將其嵌入原生或桌面版應用程式中,用以識別您的應用程式。由於用戶端權杖嵌入在應用程式內,因此並不是用來當作密鑰識別碼使用。您可以在 Meta 應用程式主控板中找到用戶端權杖。

粉絲專頁存取權杖

粉絲專頁存取權杖可用來讀取、寫入和修改屬於 Facebook 粉絲專頁的資料。若要取得粉絲專頁存取權杖,您需要先取得用戶存取權杖,然後透過圖形 API,使用該用戶存取權杖來取得粉絲專頁存取權杖。

系統用戶存取權杖

如果您的應用程式會在商家用戶端的廣告物件或粉絲專頁上執行自動化程式動作,而不需仰賴應用程式用戶輸入資料,或日後不需要重新驗證,則會使用系統用戶存取權杖。

用戶存取權杖

如果您的應用程式會根據用戶的輸入內容即時執行操作,則會使用用戶存取權杖。每當應用程式呼叫 API 以代表用戶讀取、修改或寫入特定用戶的 Facebook 資料時,就會需要這種類型的存取權杖。用戶存取權杖通常是經由登入對話方塊取得,並且需要用戶允許您的應用程式取得權杖。

用戶存取權杖

儘管每個平台都可經由不同的 API 產生存取權杖,但是所有平台都應遵循基本策略,以取得用戶權杖:

短期權杖和長期權杖

用戶存取權杖有兩種形式:短期權杖和長期權杖。短期權杖的存留期通常約為一到兩個小時,而長期權杖通常有約 60 天的存留期。您不應依賴這些剩餘使用期,使用期可能在未警告下隨時變更,或提早過期。詳情請參閱處理錯誤一節。

經由網頁版登入所產生的存取權杖是短期權杖,但您可以將這些權杖轉換成長期權杖,方法是使用應用程式密鑰進行伺服器端 API 呼叫。

根據預設,使用 Facebook iOS 和 Android SDK 的行動應用程式會取得長期權杖。

使用長期權杖對 Facebook 行銷 API 進行標準存取的應用程式,將收到沒有到期時間的長期權杖。這些權杖仍有可能因其他原因而失效,但不會只因時間因素就到期。這點也適用於企業管理平台中系統用戶的存取權杖。

權杖屬於可攜式

瞭解存取權杖時,很重要的一個認知是大部分權杖都具有可攜式特性。但是,Apple 不允許將權杖移動到伺服器。否則,當您有了存取權杖後,就可以用來從行動用戶、網頁瀏覽器或您的伺服器,對 Facebook 的伺服器進行呼叫。如果權杖是在用戶端上取得,您就可以傳送這個權杖到您的伺服器,然後用在伺服器對伺服器呼叫。如果權杖經由伺服器呼叫取得,您也可以傳送這個權杖給用戶端,然後從用戶端進行呼叫。

在您的用戶端和伺服器之間移動權杖必須透過 HTTPS 以安全的方式進行,以確保用戶帳號的安全性。深入瞭解在用戶端和伺服器之間移動權杖的可能影響

不同平台會有不同的方法來開始這個程序,而且其中所包含的功能,可代表開發人員和授予權限的用戶管理存取權杖:

Android

Facebook Android SDK 可透過 com.facebook.AccessToken 類別自動管理用戶存取權杖。您可以實作 Android 專用 Facebook 登入,深入瞭解如何取得用戶存取權杖。如需擷取用戶存取權杖,則可檢查 Session.getCurrentAccessToken

程式碼範例

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    accessToken = AccessToken.getCurrentAccessToken();
}

iOS

Facebook iOS SDK 可透過 FBSDKAccessToken 類別自動管理用戶存取權杖。您可以實作 iOS 專用 Facebook 登入,深入瞭解如何取得用戶存取權杖。如需擷取存取權杖,則可檢查 FBSDKAccessToken.currentAccessToken

程式碼範例

- (void)viewDidLoad
{
  [super viewDidLoad];
  NSString *accessToken = [FBSDKAccessToken currentAccessToken];
}

JavaScript

Facebook JavaScript SDK 會自動在瀏覽器 Cookie 中取得並保留用戶存取權杖。您可以呼叫 FB.getAuthResponse,如此將會在回應內加入 accessToken 屬性,方便擷取用戶存取權杖。

程式碼範例

FB.getLoginStatus(function(response) {
  if (response.status === 'connected') {
    var accessToken = response.authResponse.accessToken;
  } 
} );

請參閱 Facebook 網頁專用 SDK 文件,瞭解完整的程式碼範例

網頁版(不使用 JavaScript)

不使用 Facebook JavaScript SDK 建立網頁版應用程式,您需要在執行該文件所列步驟期間產生存取權杖。

應用程式存取權杖

應用程式存取權杖可用來代表應用程式提出對 Facebook API 的要求,而非代表用戶。這可以用來修改應用程式的參數、建立並管理測試用戶,或是讀取您的應用程式洞察報告。

限制

使用用戶存取權杖提出要求的應用程式,通常可以看到某些用戶資料,但如果使用應用程式存取權杖,就不一定可以看到這些用戶資料。如果您在應用程式中讀取並使用用戶資料,應該要使用用戶存取權杖,而非應用程式存取權杖。

如果您的應用程式在應用程式主控板的進階設定中設定為 Native/Desktop,系統就會認為應用程式存取權杖不安全,而無法用於 API 呼叫。這是因為我們假設原生或桌面版應用程式會把應用程式密鑰嵌入某處(因此使用這種密鑰產生的應用程式存取權杖並不安全)。

產生應用程式存取權杖

若要產生應用程式存取權杖,您需要:

程式碼範例

curl -X GET "https://graph.facebook.com/oauth/access_token
  ?client_id={your-app-id}
  &client_secret={your-app-secret}
  &grant_type=client_credentials"

這個呼叫將傳回應用程式存取權杖,可用來取代用戶存取權杖,以進行如上所述的 API 呼叫。同樣地,為了安全起見,切勿將應用程式存取權杖硬式編碼至用戶端程式碼,這樣做有可能讓載入您網頁或反編譯您應用程式的所有用戶,都有存取應用程式密鑰的完整權限,並可修改您的應用程式。這代表在大多數情況下,您將只能在伺服器對伺服器呼叫中使用應用程式存取權杖。

請注意,這項要求會使用您的應用程式密鑰,因此切勿以用戶端程式碼或可能遭反編譯的應用程式二進位檔進行。最重要的是,絕對不要與任何用戶分享應用程式密鑰。因此,這個 API 呼叫只應該使用伺服器端程式碼進行。

還有另一種方法可進行圖形 API 呼叫,且不需要使用所產生的應用程式存取權杖。當您進行呼叫時,可以只傳遞應用程式編號和應用程式密鑰,並將其當成 access_token 參數:

curl -i -X GET "https://graph.facebook.com/{api-endpoint}&access_token={your-app_id}|{your-app_secret}"   

是否使用產生的存取權杖,或者使用這個方法,取決於您想將應用程式密鑰隱藏在哪裡。

粉絲專頁存取權杖

粉絲專頁存取權杖可用在圖形 API 呼叫中,以管理 Facebook 粉絲專頁。若要產生粉絲專頁存取權杖,粉絲專頁的管理員必須授予應用程式粉絲專頁權限或所需的權限。授予權限之後,您就可以使用具有所需權限的用戶存取權杖,擷取粉絲專頁存取權杖。

程式碼範例

curl -i -X GET "https://graph.facebook.com/{your-user-id}/accounts?access_token={user-access-token}" 

這項要求將傳回您具有角色的粉絲專頁清單和每個粉絲專頁的相關資訊,像是粉絲專頁類別、您在各粉絲專頁上所擁有的特定權限,以及粉絲專頁存取權杖。

{
  "data": [
    {
      "access_token": "EAACEdE...",
      "category": "Brand",
      "category_list": [
        {
          "id": "1605186416478696",
          "name": "Brand"
        }
      ],
      "name": "Ash Cat Page",
      "id": "1353269864728879",
      "tasks": [
        "ANALYZE",
        "ADVERTISE",
        "MODERATE",
        "CREATE_CONTENT",
        "MANAGE"
      ]
    },
    {
      "access_token": "EAACEdE...",
      "category": "Pet Groomer",
      "category_list": [
        {
          "id": "163003840417682",
          "name": "Pet Groomer"
        },
        {
          "id": "2632",
          "name": "Pet"
        }
      ],
      "name": "Unofficial: Tigger the Cat",
      "id": "1755847768034402",
      "tasks": [
        "ANALYZE",
        "ADVERTISE",
        "MODERATE",
        "CREATE_CONTENT"
      ]
    }
  ]
}

您可以使用粉絲專頁存取權杖代表粉絲專頁發出 API 呼叫。例如,您可以發佈近況更新到粉絲專頁(而非這位用戶的動態時報),或讀取粉絲專頁洞察報告資料。

每個粉絲專頁、管理員和應用程式都有專屬的粉絲專頁存取權杖。

用戶端存取權杖

iOS 和 Android 適用的 SDK 第 13.0 版預計在 2022 年初發行,自該版本起,所有對圖形 API 發出的呼叫都必須取得用戶端權杖

與應用程式權杖相同的是,用戶端權杖代表應用程式(而不是用戶)發出圖形 API 要求。

與其他權杖不同的是,用戶端存取權杖無法單獨用於要求,必須結合應用程式編號使用。若要這樣做,請將權杖附加到應用程式編號結尾,並以豎線符號(|)分隔:

{app-id}|{client-token}

例如:

access_token=1234|5678

若要取得應用程式的用戶端存取權杖,請執行下列操作:

  1. 登入開發人員帳號
  2. 應用程式頁面中,選擇應用程式來開啟該應用程式的主控板。
  3. 主控板中,依序前往設定 > 進階 > 帳號安全 > 用戶端權杖

存取權杖長度

由於 Facebook 會變更存取權杖中儲存的內容及其編碼方式,因此所有存取權杖類型的長度都會隨時間而變長。存取權杖的長度隨時間變長或變短都是可預期的。請使用可變長度且無特定最大尺寸的資料類型來儲存存取權杖。

瞭解詳情