액세스 토큰으로 작업할 때는 이와 관련된 정보(사용자 또는 만료 등)를 확인해야 합니다. 이 정보를 가져오려면 디버그 도구를 사용하거나 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 SDK의 API 오류는 콜백에 전달된 NSError
인스턴스를 통해 나타납니다. 자세한 내용은 iOS SDK 오류 문서를 참조하세요.
일반적으로 Android SDK의 API 오류는 Requests
의 콜백에 전달된 Response
개체를 통해 나타납니다. 특히 response.getError()
를 호출하여 FacebookRequestError
인스턴스를 가져올 수 있습니다.
API 오류 참고 자료에서 더 많은 오류에 대해 알아볼 수 있으나, 이 세 가지 오류가 액세스 토큰 처리 시 가장 일반적으로 나타납니다.