액세스 토큰은 사용자, 앱 또는 페이지를 식별하는 불명확한 문자열이며 앱에서 그래프 API를 호출하는 데 사용할 수 있습니다. 토큰에는 만료 시기와 토큰을 생성한 앱에 대한 정보가 있습니다. 공개 범위 확인으로 인해 Meta에서 수행되는 대부분의 API 호출에는 액세스 토큰이 포함되어야 합니다. 다양한 사용 사례를 지원하기 위해 여러 가지 유형의 액세스 토큰이 있고 액세스 토큰을 획득하기 위한 여러 방법이 있습니다.
액세스 토큰 유형 | 설명 |
---|---|
앱 액세스 토큰은 앱 설정을 읽고 수정하는 데 사용되고 Meta 앱 시크릿 코드를 사용하여 생성된 후 앱 전체 설정을 변경하는 호출을 보내는 동안 사용됩니다. 서버 간 호출을 통해 앱 액세스 토큰을 얻습니다. | |
클라이언트 토큰은 앱을 식별하기 위해 네이티브 앱이나 데스크톱 앱에 포함할 수 있는 앱 수준 API에 액세스하는 데 사용됩니다. 클라이언트 토큰은 앱에 포함되어 있으므로 시크릿 ID로 사용할 수 없습니다. 클라이언트 토큰은 Meta 앱 대시보드에서 확인할 수 있습니다. | |
페이지 액세스 토큰은 Facebook 페이지에 속한 데이터를 읽고, 쓰고, 수정하는 데 사용됩니다. 페이지 액세스 토큰을 확보하려면 먼저 사용자 액세스 토큰을 얻은 후, 이 사용자 액세스 토큰을 사용하여 그래프 API를 통해 페이지 액세스 토큰을 얻어야 합니다. | |
시스템 사용자 액세스 토큰은 앱이 앱 사용자의 입력에 의존하거나 나중에 재인증할 필요 없이 비즈니스 클라이언트의 광고 개체나 페이지에 대해 프로그래밍 방식의 자동 작업을 수행할 경우에 사용됩니다. | |
사용자 액세스 토큰은 앱이 사용자의 입력에 따라 실시간으로 조치를 취하는 경우에 사용됩니다. 앱에서 특정 사용자 대신 Facebook의 데이터를 읽고, 수정하고, 쓰기 위해 API를 호출할 때마다 이 유형의 액세스 토큰이 필요합니다. 사용자 액세스 토큰은 일반적으로 로그인 대화 상자를 통해 얻으며, 사용자가 앱에서 토큰을 확보할 수 있도록 허용해야 합니다. |
플랫폼마다 서로 다른 API를 통해 액세스 토큰을 생성하지만 사용자 토큰을 가져올 때는 모두 기본 전략을 따릅니다.
사용자 액세스 토큰은 단기 실행 토큰과 장기 실행 토큰의 두 양식으로 제공됩니다. 일반적으로 단기 실행 토큰의 사용 시간은 약 1~2시간인 반면, 장기 실행 토큰의 사용 시간은 약 60일입니다. 이러한 수명이 일정할 것으로 생각하면 안 됩니다. 토큰 수명은 경고 없이 변경되거나 조기에 만료될 수 있습니다. 오류 처리에서 자세히 알아보세요.
웹 로그인을 통해 생성된 액세스 토큰은 단기 실행 토큰이지만, 앱 시크릿 코드와 함께 서버 측 API를 호출하여 장기 실행 토큰으로 변환할 수 있습니다.
Facebook의 iOS 및 Android SDK를 사용하는 모바일 앱은 기본적으로 장기 실행 토큰을 가져옵니다.
장기 실행 토큰을 사용할 때 Facebook의 마케팅 API에 대한 표준 액세스 권한이 있는 앱은 만료 시간이 없는 장기 실행 토큰을 받게 됩니다. 이 토큰은 다른 이유로 인해 여전히 무효화할 수 있지만 단지 시간 때문에 만료되지는 않습니다. 비즈니스 관리자의 시스템 사용자를 위한 액세스 토큰의 경우에도 해당됩니다.
액세스 토큰의 중요한 요소 중 하나는 대부분 토큰이 이동 가능하다는 점입니다. 그러나 Apple에서는 토큰을 서버로 이동하지 못하게 제한합니다. 그 외의 경우에는 액세스 토큰을 얻은 후 모바일 클라이언트 또는 웹 브라우저에서 호출하거나 서버에서 Facebook 서버로 호출하는 데 사용할 수 있습니다. 클라이언트에서 토큰을 얻으면 이 토큰을 서버에 보내 서버 간 호출에 사용할 수 있습니다. 서버 호출을 통해 토큰을 가져오면 이 토큰을 클라이언트에 보내 클라이언트에서 호출할 수 있습니다.
사용자 계정의 보안을 위해 클라이언트와 서버 간 토큰 이동은 HTTPS를 통해 안전하게 수행해야 합니다. 클라이언트와 서버 간에 토큰을 이동하는 경우 미치는 영향에 대해 자세히 읽어보세요.
플랫폼마다 이 프로세스를 시작하는 메서드가 서로 다르며, 개발자와 권한을 부여하는 사용자 대신 액세스 토큰을 관리하는 기능을 포함합니다.
Android용 Facebook SDK에서는 com.facebook.AccessToken
클래스를 통해 사용자 액세스 토큰을 자동으로 관리합니다. Android용 Facebook 로그인을 구현하여 사용자 액세스 토큰을 가져오는 방법에 대해 자세히 알아볼 수 있습니다. Session.getCurrentAccessToken
을 검사하여 사용자 액세스 토큰을 가져올 수 있습니다.
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); accessToken = AccessToken.getCurrentAccessToken(); }
iOS용 Facebook SDK에서는 FBSDKAccessToken
클래스를 통해 사용자 액세스 토큰을 자동으로 관리합니다. iOS용 Facebook 로그인을 구현하여 사용자 액세스 토큰을 가져오는 방법에 대해 자세히 알아볼 수 있습니다. FBSDKAccessToken.currentAccessToken
을 검사하여 액세스 토큰을 가져올 수 있습니다.
- (void)viewDidLoad { [super viewDidLoad]; NSString *accessToken = [FBSDKAccessToken currentAccessToken]; }
Facebook SDK for Javascript에서는 자동으로 사용자 액세스 토큰을 얻어 브라우저 쿠키에 유지합니다. 응답에 accessToken
속성을 포함할 FB.getAuthResponse
를 호출하여 사용자 액세스 토큰을 가져올 수 있습니다.
FB.getLoginStatus(function(response) { if (response.status === 'connected') { var accessToken = response.authResponse.accessToken; } } );
전체 코드 샘플을 보려면 Facebook 웹 SDK 문서를 참조하세요.
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는 서버 측 코드를 사용해서만 호출해야 합니다.
생성된 앱 액세스 토큰을 사용하지 않아도 되는 다른 방법으로 그래프 API를 호출할 수 있습니다. 호출할 때 앱 ID와 앱 시크릿 코드만 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를 호출할 수 있습니다. 예를 들어 사용자의 타임라인이 아니라 페이지에 상태 업데이트를 게시하거나 페이지 인사이트 데이터를 읽을 수 있습니다.
페이지 액세스 토큰은 페이지, 관리자 및 앱마다 다릅니다.
2022년 초에 출시될 예정인 iOS 및 Android용 SDK v13.0부터는 모든 그래프 API를 호출할 때 반드시 클라이언트 토큰이 있어야 합니다.
앱 토큰과 마찬가지로 클라이언트 토큰은 사용자 대신 앱을 대행하여 그래프 API 요청을 보냅니다.
다른 토큰과 달리 클라이언트 액세스 토큰은 단독으로 요청에서 사용할 수 없으며 앱 ID와 결합해서 사용해야 합니다. 그렇게 하려면 앱 ID 끝에 토큰을 추가하고 파이프 기호(|
)로 구분합니다.
{app-id}|{client-token}
예를 들면 다음과 같습니다.
access_token=1234|5678
앱의 클라이언트 액세스 토큰을 가져오려면 다음 단계를 따르세요.
Facebook에서 액세스 토큰에 저장되는 내용과 인코딩 방식을 바꾸기 때문에 모든 액세스 토큰 유형의 길이는 시간이 지나면서 변경됩니다. 액세스 토큰은 시간이 지남에 따라 늘어나고 줄어들 수 있습니다. 액세스 토큰을 저장할 때 최대 크기가 지정되지 않은 가변 길이 데이터 유형을 사용하세요.
액세스 토큰 리스트와 각 토큰의 디버깅 정보를 확인하려면 액세스 토큰 도구를 사용하세요.