인스타그램 Oembed API를 잘 사용하던 어느 날 페이스북 앱에 주의 알림을 하나 받았다.
뭐냐...?
구글링 해보니 앱을 삭제 후 다시 만들면 해결이 된다는 이야기가 있어 따라해봤다.
{"error":{"message":"Error validating application. Application has been deleted.","type":"OAuthException","code":190,"fbtrace_id":"Akgckr-zIkYF0nhzMP7_BVx"}}
...?
앱이 삭제되면 안 되나 싶어 황급히 앱 복원을 하고 다시 진행해도 똑같았다.
사용 중인 페이스북 앱이 문제가 있는건가 싶어 다른 앱들의 앱 아이디와 앱 시크릿 코드를 사용해봤지만 무용지물이었다.
로컬에서는 되는데 서버가 안되는 이상한 상황...
개인적으로 페이스북 API 문서가 AWS 문서보다 덜 익숙하지만 찾아봤다.
내가 사용하는 액세스 토큰 방식은 "{앱_아이디}|{앱_시크릿_코드}" 이며 이 방식의 장점은 토큰의 만료일이 없다는 것이다.
생성하는 앱 액세스 토큰은 만료기간이 존재하며 아래와 같이 요청 후 응답받은 토큰 값을 사용한다.
curl -X GET "https://graph.facebook.com/oauth/access_token ?client_id={your-app-id} &client_secret={your-app-secret} &grant_type=client_credentials"
액세스 토큰의 만료가 될 경우 "190" 코드값을 내려준다고 한다.
190 코드의 종류는 아래와 같다.
만료된 토큰 샘플 응답
{
"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"
}
}
앱 승인 오류 샘플 응답
승인을 철회하거나 앱을 한 번도 승인한 적이 없는 사람의 경우, 오류 응답은 앱의 새로운 사용자에 대한 오류 응답과 동일합니다.
승인이 취소된 토큰 샘플 응답
{
"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"
}
}
흠... 다 아닌데?
케이스가 없어 버그신청을 해놓은 상황, 도대체 서버에서 RestTemplate이 요청 URL을 어떻게 보내는지 살펴보기 위해 로깅을 해보기로 했다.
스프링 부트 프로젝트라 application.properties 파일에 아래 코드를 추가 후 테스트를 해봤다.
logging.level.org.springframework.web.client.RestTemplate=DEBUG
로컬에서는 GET 요청에 대한 헤더, path 등의 정보를 로깅되는 것을 확인하여 서버에 올려봤다.
안 되네?
다른 방법을 찾아보고 테스트해보니 로컬에서는 되고 서버에서는 안 되네?
...
그렇다. 이건 파이썬이 아니었다.
빌드하지 않고 소스만 업데이트 하고 스프링 부트의 내장 톰캣을 재시작만 열심히 했던 것이다...
너무 인터프리터 방식에 익숙해서 잊어버리고 있던 자바의 컴파일&빌드...
황급히 버그 신청을 종료시켰다.
ㅎㅎ...
Reference URLs
https://developers.facebook.com/docs/facebook-login/access-tokens#apptokens
https://developers.facebook.com/docs/facebook-login/access-tokens/debugging-and-error-handling/
'[개발] 언어 > Python' 카테고리의 다른 글
python3 - [자료구조] Dictionary를 알아보자 (0) | 2021.06.15 |
---|---|
python3 - hasattr() 함수를 알아보자. (0) | 2021.06.12 |
python3 - decorator 패턴 (0) | 2021.06.11 |
python3 enum 사용하기 (0) | 2021.06.10 |
python3 - String(문자열) 사용하기 (0) | 2021.06.09 |