長效存取憑證

預設用戶和專頁存取憑證為短效憑證,並會在數小時後過期;然而,您可使用短期憑證來獲取長效憑證。

當您使用 iOS、Android 或 JavaScript SDK 時,如果用戶在過去 90 天內使用過您的應用程式,則 SDK 會自動重新整理憑證。使用 Facebook SDK 的原生流動應用程式會獲得有效期為 60 天左右的長期用戶存取憑證。當使用應用程式的用戶向 Facebook 的伺服器作出要求時,這些憑證將會每天重新整理一次。如果未有作出任何要求,憑證將會在大約 60 天後到期,而用戶將必須再經過一次登入流程以取得新憑證。

最新版本 Graph API 為: v21.0

獲取長期用戶存取憑證

如果您需要使用長期用戶存取憑證,則可透過短期用戶存取憑證產生長期用戶存取憑證。長期憑證的有效期通常為 60 天。

您需要準備好以下項目:

  • 有效的用戶存取憑證
  • 您的應用程式編號
  • 您的應用程式密鑰

查詢 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}&
    fb_exchange_token={your-access-token}" 

回應範例

{
  "access_token":"{long-lived-user-access-token}",
  "token_type": "bearer",
  "expires_in": 5183944            //The number of seconds until the token expires
}

長期用戶存取憑證的產生流程如下所示:

取得長期憑證後,您可以從您的伺服器使用憑證,也可以將之傳回用戶端,並從該處使用憑證。

注意事項

  • 不得使用已過期的憑證來要求獲取長效憑證。一旦憑證到期,您的應用程式就必須讓用戶重新執行登入流程,以產生新的短期存取憑證。

  • 請確保從您的伺服器執行此呼叫,而不是用戶端。您的應用程式密鑰已包含在此 API 調用中,因此切勿從用戶端作出要求。請改為在伺服器端執行會作出要求的代碼,然後將包含長期憑證的回應傳回給您的用戶端代碼。這將會產生與原始憑證不同的字串,因此如果您要儲存這些憑證,請將之取代舊的憑證。

  • 請勿在多個網絡用戶端上使用相同的長效憑證(例如不要在多部電腦上登入)。您應該改為在伺服器上使用長期憑證來產生代碼,然後在用戶端用該代碼來取得長期憑證。請參閱以下使用伺服器端長效憑證產生長效憑證部分,了解相關資訊。

獲取長期專頁存取憑證

如果您需要使用長期專頁存取憑證,則可透過短期專頁存取憑證產生長期專頁存取憑證。長效專頁存取憑證不設過期日期,而且僅會在特定情況下過期或失效

您需要準備好以下項目:

查詢 GET {app-scoped-user-id}?accounts 端點。

curl -i -X GET "https://graph.facebook.com/{graph-api-version}/{app-scoped-user-id}/accounts?
  access_token={long-lived-user-access-token}"

回應範例

{
  "data":[
    {
      "access_token":"{long-lived-page-access-token}",
      "category":"Brand",
      "category_list":[
        {
          "id":"1605186416478696",
          "name":"Brand"
        }
      ],
      "name":"Cute Kitten Page",
      "id":"{page-id}",
      "tasks":[
        "ANALYZE",
        "ADVERTISE",
        "MODERATE",
        "CREATE_CONTENT",
        "MANAGE"
      ]
    }
  ],
  "paging":{
    "cursors":{
      "before":"MTM1MzI2OTg2NDcyODg3OQZDZD",
      "after":"MTM1MzI2OTg2NDcyODg3OQZDZD"
    }
  }
}

為用戶端獲取長期憑證

Facebook 設有獲取應用程式長期存取憑證的選項,從而避免觸發 Facebook 的垃圾訊息自動偵測系統。適用於符合以下條件的應用程式:

  • 擁有專屬身份驗證系統(例如使用用戶名稱/密碼)
  • 在自己的伺服器為使用不同用戶端(瀏覽器或原生流動應用程式)的用戶儲存 Facebook 存取憑證
  • 可從上述所有不同的用戶端調用 API

從較高的層面來看,以下是您從用戶端取得長期憑證的方式:

  1. 使用有效的長期存取憑證,然後您的伺服器會傳送要求,以向 Facebook 獲取代碼。
  2. Facebook 會將代碼傳回伺服器,然後您便可將此代碼安全地傳送至用戶端。
  3. 用戶端會使用此代碼,向 Facebook 要求獲取長期憑證。
  4. Facebook 會向用戶端傳送可用於發佈限時動態或查詢資料的長期憑證。

獲取代碼

查詢 GET oauth/client_code 端點。重新導向 URI 必須與您透過 Facebook 登入 > 設定用戶端 > OAuth 設定資訊卡的應用程式管理中心所設定的值完全一致。

curl -i -X GET "https://graph.facebook.com/{graph-api-version}/oauth/client_code?             
    client_id={app-id}&
    client_secret={app-secret}&
    redirect_uri={app-redirect-uri}&
    access_token={long-lived-user-access-token}" 

回應範例

{
  "code":"{code-for-your-client}"
}

使用代碼兌換長期存取憑證

從 Facebook 的伺服器取擷取代碼後,您需要透過安全管道將代碼傳送至用戶端。傳送完成後,您需要從用戶端向 /oauth/access_token 發出要求:

curl -i -X GET "https://graph.facebook.com/{graph-api-version}/oauth/access_token?   
    code={code-for-your-client}&
    client_id={app-id}&
    redirect_uri={app-redirect-uri}&
    machine_id= {your-client-machine-id}"

machine_id 為可識別並追蹤用戶端的選用參數,並可用於保障帳戶安全與防範垃圾訊息。此編號是按用戶端提供的值,而非按用戶提供的值。如果您先前已執行呼叫以取得代碼,並已獲得 machine_id,您應將其加入代碼要求。

回應範例

{
  "access_token":"{long-lived-access-token}", 
  "expires_in":5183944,           //The number of seconds until the token expires
  "machine_id":"{your-client-machine-id}"
}

產生長效憑證的流程如下所示: