액세스 토큰: 디버깅 및 오류 처리

토큰과 디버깅에 관한 정보 가져오기

액세스 토큰으로 작업할 때는 이와 관련된 정보(사용자 또는 만료 등)를 확인해야 합니다. 이 정보를 가져오려면 디버그 도구를 사용하거나 API 엔드포인트를 사용할 수 있습니다.

API를 사용할 때는 그래프 API 요청을 보낼 수 있습니다.

curl -i -X GET "https://graph.facebook.com/debug_token?
  input_token={input-token}&
  access_token={valid-access-token}

{input-token}은 정보를 가져오고자 하는 액세스 토큰으로 바꾸고 {access-token}은 유효한 액세스 토큰으로 바꿉니다. 이러한 토큰은 반드시 같은 앱에서 가져와야 합니다.

API 호출의 응답은 다음과 같은 JSON 배열입니다.

{ "data":{ "app_id":"{app-id}", "type":"USER", "application":"{app-name}", "data_access_expires_at":1576687825, "expires_at":1570820400, "is_valid":true, "scopes":[ "pages_show_list", "public_profile" ], "granular_scopes":[ { "scope":"pages_show_list", "target_ids":[ "{page-1-app-can-access-id}", "{page-2-app-can-access-id}" ] } ], "user_id":"10215241773831025" } } 

장기 실행 액세스 토큰은 issued_at 필드도 반환합니다.

오류 처리

Facebook에서는 액세스 토큰이 유효하지 않게 되어도 알림을 보내지 않습니다. 액세스 토큰과 함께 expiry 시간을 전송하지 않으면 앱은 API에 요청을 시도할 때에야 해당 토큰이 유효하지 않다는 것을 알게 될 수 있습니다.

이벤트와 관련된 보안으로 인해 액세스 토큰은 예상 만료 시간이 되기 전에 무효화될 수 있습니다.

대부분 앱에서 만료된 토큰을 처리하는 가장 좋은 방법은 API가 보낸 오류 메시지를 캡처하는 것입니다. 각각의 경우에 대해 API는 JSON 본문에 오류의 성격에 관해 설명하는 오류 메시지, 코드 및 하위 코드를 반환합니다. 코드와 하위 코드에 대한 자세한 내용은 오류 코드 참고 문서를 참조하세요.

만료되거나 무효화된 액세스 토큰

만료된 토큰 샘플 응답

{
  "error": {
    "message": "Error validating access token: Session has expired on Wednesday, 14-Feb-18 18:00:00 PST. The current time is Thursday, 15-Feb-18 13:46:35 PST.",
    "type": "OAuthException",
    "code": 190,
    "error_subcode": 463,
    "fbtrace_id": "H2il2t5bn4e"
  }
}

무효화된 토큰 샘플 응답

이 응답은 사용자가 앱에서 로그아웃하거나 비밀번호를 변경했을 때 전송됩니다.

{
  "error": {
    "message": "Error validating access token: The session is invalid 
                because the user logged out.", 
    "type": "OAuthException", 
    "code": 190,
    "error_subcode": 460,
    "fbtrace_id": "H2il2t5bn4e"
  }
}

유효한 액세스 토큰을 얻어서 사용자를 대신해 API를 호출하려면 그 사용자가 다시 로그인해야 합니다. 앱이 새로운 사용자에게 사용하는 로그인 플로에 따라 적용할 메서드가 결정됩니다.

앱 승인 오류 샘플 응답

승인을 철회하거나 앱을 한 번도 승인한 적이 없는 사람의 경우, 오류 응답은 앱의 새로운 사용자에 대한 오류 응답과 동일합니다.

승인이 취소된 토큰 샘플 응답

{
  "error": {
    "message": "Error validating access token: User {user-id} has 
                not authorized application {your-app-id}.", 
    "type": "OAuthException", 
    "code": 190,
    "error_subcode": 458,
    "fbtrace_id": "H2il2t5bn4e"
  }
}
}

iOS 앱에서 토큰 오류 처리

일반적으로 iOS SDK의 API 오류는 콜백에 전달된 NSError 인스턴스를 통해 나타납니다. 자세한 내용은 iOS SDK 오류 문서를 참조하세요.

Android 앱에서 토큰 오류 처리

일반적으로 Android SDK의 API 오류는 Requests의 콜백에 전달된 Response 개체를 통해 나타납니다. 특히 response.getError()를 호출하여 FacebookRequestError 인스턴스를 가져올 수 있습니다.

더 알아보기

API 오류 참고 자료에서 더 많은 오류에 대해 알아볼 수 있으나, 이 세 가지 오류가 액세스 토큰 처리 시 가장 일반적으로 나타납니다.