본문 바로가기
개발/회고

OEmbed API 액세스 토큰 에러 코드:190

by Devsong26 2021. 6. 6.

인스타그램 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/