長期存取權杖

預設的用戶和粉絲專頁存取權杖是短期的,會在幾小時內到期,但是您可以將短期權杖換成長期權杖。

當您使用 iOS、Android 或 JavaScript SDK 時,如果用戶在過去 90 天內使用了您的應用程式,SDK 將自動重新整理權杖。使用 Facebook SDK 的原生行動應用程式可取得長期的用戶存取權杖,有效期間約 60 天。當使用您應用程式的用戶對 Facebook 的伺服器發出要求時,這些權杖將會每天重新整理一次。如果未發出任何要求,權杖將會在大約 60 天後到期,用戶必須再經過一次登入流程以取得新權杖。

最新的圖形 API 版本: v19.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}"
}

產生長期權杖的工作流程如下所示: