장기 실행 액세스 토큰

기본 사용자 액세스 토큰과 페이지 액세스 토큰은 단기적으로 실행되어 몇 시간 이내에 만료되지만, 단기 실행 토큰을 장기 실행 토큰으로 교환할 수 있습니다.

iOS, Android 또는 JavaScript SDK를 사용하는 경우, 사용자가 최근 90일 이내에 앱을 사용했다면 SDK에서 토큰을 자동으로 새로 고침합니다. Facebook SDK를 사용하는 네이티브 모바일 앱은 약 60일간 유효한 장기 실행 사용자 액세스 토큰을 얻게 됩니다. 앱 사용자가 Facebook 서버에 요청을 보내면 해당 토큰이 하루에 한 번 갱신됩니다. 요청이 없는 경우 토큰은 약 60일 후에 만료되며, 사용자는 새 토큰을 얻기 위해 다시 로그인 플로를 거쳐야 합니다.

최신 그래프 API 버전: v21.0

장기 실행 사용자 액세스 토큰 가져오기

장기 실행 사용자 액세스 토큰이 필요하면 단기 실행 사용자 액세스 토큰에서 생성할 수 있습니다. 일반적으로 장기 실행 토큰은 약 60일간 지속됩니다.

다음 항목을 준비해야 합니다.

  • 유효한 사용자 액세스 토큰
  • 앱 ID
  • 앱 시크릿 코드

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}"
}

장기 실행 토큰을 생성하기 위한 워크플로는 다음과 같습니다.