Meta 技術存取憑證

存取憑證是一種可識別用戶、應用程式或專頁的不透明字串,可供應用程式用來執行 Graph API 呼叫。憑證包含的資訊可讓您知道這個憑證何時到期,以及哪個應用程式建立了這個憑證。因為私隱檢查的關係,在 Meta 應用程式上的大多數 API 呼叫都需要包含存取憑證。不同類型的存取憑證可用來支援不同使用案例;您可使用多種方法取得存取憑證。

存取憑證類型說明

應用程式存取憑證

應用程式存取憑證用於讀取和修改應用程式設定,並使用 Meta 應用程式密鑰產生,之後會在進行變更應用程式範圍設定的呼叫期間使用。您可經由伺服器對伺服器的呼叫取得應用程式存取憑證。

用戶端憑證

用戶端憑證用於存取可嵌入原生或桌面版應用程式的應用程式級別 API,以識別您的應用程式。由於用戶端憑證嵌入在應用程式內,因此並不是用來當作密鑰識別碼使用。用戶端憑證位於您的 Meta 應用程式管理中心內。

專頁存取憑證

專頁存取憑證用於讀取、寫入和修改屬於 Facebook 專頁的資料。若要取得專頁存取憑證,您必須先取得用戶存取憑證,然後使用此用戶存取憑證經由 Graph 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 SDK for Javascript 建構網頁版應用程式,您需要在執行相應文件中說明的步驟時產生存取憑證。

應用程式存取憑證

應用程式存取憑證可用來代表應用程式提出對 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 呼叫。

您還可以透過另一種方法,呼叫不要求使用您所產生的應用程式存取憑證之 Graph API。您可以在發出呼叫時以 access_token 參數的形式傳送應用程式編號和應用程式密鑰:

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

要使用您產生的存取憑證還是這個方法,取決於您想將應用程式密鑰隱藏在哪裡。

專頁存取憑證

專頁存取憑證可用在 Graph 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 呼叫。例如,您或許可以將近況更新發佈至專頁(而非這名用戶的生活時報),或讀取專頁洞察報告資料。

每個專頁、管理員和應用程式均擁有不重複的專頁存取憑證。

用戶端存取憑證

從預計在 2022 年初發佈的 iOS 和 Android SDK 13.0 版開始,所有對 Graph API 的呼叫都將需要用戶端憑證

與應用程式憑證一樣,用戶端憑證會代表應用程式提出 Graph API 要求,而非代表用戶。

與其他憑證不同,用戶端存取憑證無法獨立用於要求,並必須配合應用程式編號使用。如要執行此動作,請將您的憑證附加至應用程式編號的尾端,並使用豎線分隔 (|):

{app-id}|{client-token}

例如:

access_token=1234|5678

如要取得應用程式的用戶端存取憑證,請執行以下操作:

  1. 登入您的開發人員帳戶
  2. 應用程式頁面中選擇一個應用程式,以開啟其管理中心。
  3. 管理中心內,前往設定 > 進階 > 帳戶安全 > 用戶端憑證

存取憑證長度

由於 Facebook 會更改儲存於其中的內容和它們的編碼方式,因此所有類型的存取憑證長度均可能會隨著時間的推移而有所變化。它們的長度可能會隨著時間推移而增長或減少。請使用可變的長度數據類型,而不要指定儲存存取憑證的最大長度。

了解詳情