카카오 로그인 access token 갱신 방법 문의

현재 ios 에서 카카오 로그인 api를 사용중인데요 사용하다보니 access token 이 자주 만료가 되어 확인해보니
access token은 12시간 refresh token은 30일이더군요 그리고 refresh token으로 access token을 갱신할 수 있다는 내용도 어디선가 보았습니다만 refresh token으로 access token을 갱신하는 방법은 찾을 수가 없었습니다.
access token을 갱신하는 방법을 알고 싶습니다. 그럼 답변 부탁 드리겠습니다. 읽어주셔서 감사합니다.

1개의 좋아요

ios sdk 를 사용하신다면 액세스토큰은 직접 갱신을 하실 필요가 없습니다. 로그인하면 액세스토큰과 리프레시토큰이 sdk내부에 저장되며 엑세스토큰은 유효기간이 만료되더라도 리프레시토큰만 유효기간이 남아있다면 별다른 api를 호출하지 않더라도 토큰을 사용하는 api를 호출할경우 자동으로 갱신되어 저장됩니다.
오히려 질문을 드려야할듯 합니다~.

  1. 직접 갱신을 하려는 이유가 무엇인지 궁금합니다.
  2. 토큰이 자주 만료되는건 어떻게 알게 되었나요?
1개의 좋아요

access_token을 앱에서 카카오에 최초 로그인 했을 때에만 서버에 저장을 하고 그 토큰을 계속해서 쓰니까 발생한 문제일 수도 있겠네요 sdk에서 자동갱신한다면 하루가 지난 후 sdk에서 토큰이 갱신되는지를 확인해보면 명확해질 거 같네요 확인을 해보겠습니다.
근데 sdk에서 갱신된 토큰값을 확인 할 수 있는지 모르겠네요… ^ ^;;

토근값 확인 가능하네요

네~.
SDK내에 저장된 토큰 get이 가능하며,
말씀대로 별도 저장을 해서 쓰는 케이스라면 주기적으로 토큰을 최신으로 유지 하셔야 합니다.
(별도로 관리하는것을 권장하지 않으므로 따로 설명드리진 않겠습니다.)

1개의 좋아요
  1. 직접 갱신을 하려는 이유가 무엇인지 궁금합니다.
    => 앱에서 로그인 후 얻어낸 엑세스 토큰을 서드파티 서버에 보내고 서드파티 서버에서 카카오 서버로 앱에서 얻어낸 엑세스 토큰으로 사용자 정보를 얻어내는데 하루가 지나면 이 엑세스 토큰으로 사용자정보를 얻어내는 게 실패가 됩니다. 이런 이유로 앱에서 액세스 토큰을 갱신하려고 했습니다. 갱신된 엑세스 토큰을 서드파티 서버로 보내게 되고요

  2. 토큰이 자주 만료되는 건 어떻게 알게 되었나요?
    => 1번 답변에서처럼 서드파티 서버에서 액세스 토큰으로 사용자 정보를 얻는 게 실패되어 알게 되었습니다.

안녕하세요~ ^ ^;
토큰값 갱신여부를 확인하기 위해서 1주일 뒤에 KOSession.shared().token.accessToken 을 찍어봤더니 nil로 나오더라고요
갱신이 안 되는듯 보입니다. 혹시 토근 갱신은 카카오로그인 api를 사용하는 경우에만 갱신되는 건 아닐까요?
개발문서를 보면 다음과 같이 나와있습니다.

사용자 토큰 주기적 갱신
iOS SDK는 API 호출 시 자동으로 사용자 토큰을 갱신하는 기능이 있습니다. 이 기능을 쓰려면 약간의 설정이 필요합니다. iOS 카카오 SDK에서는 두 가지 설정이 필요합니다.

api를 지속적으로 호출하지 않은 상태에서는 토큰갱신이 자동으로 된다는 얘기는 개발문서에 안 보이는 거 같더라고요
제가 못 찾은 건지…

제가 글을 어렵게 썻나 봅니다.

먼저 갱신관련 설명을 드리겠습니다

맨처음에 안내드린
"로그인하면 액세스토큰과 리프레시토큰이 sdk내부에 저장되며
엑세스토큰은 유효기간이 만료되더라도 리프레시토큰만 유효기간이 남아있다면 별다른 api를 호출하지 않더라도
토큰을 사용하는 api를 호출할경우 자동으로 갱신되어 저장됩니다."

이말의 의미는 자동으로 토큰이 알아서 갱신된다는 의미가 아니고
토큰을 사용하는 api 즉, 로그인이 필요한 api를 사용할경우에 그리고, 리프레시 토큰이 유효하면 sdk내부에서 엑세스토큰을 자동으로 갱신한다 라는 의미입니다.
예) KOSessionTask.userMeTask(completion:), KOSessionTask.accessTokenInfoTask

말씀처럼 아무것도 하지않고 KOSession.shared().token.accessToken을 하면 nil 은 아닐거고 만료된 예전 엑세스토큰을 얻을수 있습니다.

아마도 nil 이 리턴된건

  1. 어딘가에서 갱신이 실패를 했거나
  2. close()를 했거나
  3. unlink()를 했거나 중 하나의 케이스 일듯합니다.

sdk v1의 사용자 토큰 주기적 갱신은
말그대로 타이머를 사용한 주기적 자동갱신입니다.
https://developers.kakao.com/docs/latest/ko/kakaologin/ios#token-mgmt
여기에 나와있는 대로 설정할 경우 이용하실 수 있으며 말그대로 자동으로 토큰이 갱신됩니다.

하지만, 모앱의 리소스(타이머)를 사용하고 있어 의도치 않은 결과가 생길수도 있기때문에
곧 정식배포될 sdk v2에서는 삭제된 기능입니다.
가능하면 토큰을 사용하는 api를 주기적으로 호출해서 갱신하는것을 추천합니다.
예) KOSessionTask.accessTokenInfoTask

새로 개발하시는거라면 sdk v2 많이 사용해주셔요
https://developers.kakao.com/docs/latest/ko/sdk-download/ios

2개의 좋아요

결국 로그인이 필요한 api를 사용하는 경우에만 토큰이 리프레쉬 된다는 거지요?

sdk v1도 ‘말 그대로 자동으로’란 말이 어떠한 api도 호출하지 않아도 토큰이 갱신된다는 의미인가요?
https://developers.kakao.com/docs/latest/ko/kakaologin/ios#token-mgmt 에 보면
’카카오 API 요청 시 토큰을 갱신하는 기능도 갖추고 있습니다’ 라고 되어있어서요 개발문서대로라면 sdk v1도
api를 호출해야 내부적으로 토큰을 갱신하는 걸로 이해가 되서요 근데 또 타이머를 사용한 주기적 갱신이라고 하니
api를 호출하지 않아도 토큰이 갱신되는 것처럼 읽혀지기도 하고 헷갈리네요 ^^ ;;

1개의 좋아요

주기적 갱신은 위에 말씀드린대로 잠재적 문제점이 있기때문에 v2에서는 삭제되었습니다.
(주기적갱신 == 타이머 사용 자동갱신)
혼동하는 분들이 많아서 v1의 주기적 갱신 가이드도 삭제 되었습니다.