리프레시 토큰 문의 드립니다

안녕하세요.

질문은 REST API 기준으로 문의드립니다.

엑세스 토큰 유지시간은 6시간이므로 6시간 이내에 리프레시 토큰을 발행하고
2달 이내인 만료시간 1달 남은 시점마다 매번 갱신하면 1년 365일 유효한 토큰이 지속적으로 유지되는 것으로 이해되는데
제대로 이해했는지 궁금해서 문의드립니다.

답변 부탁드립니다.

안녕하세요.

맞습니다.
REST API 토큰은 6시간 후 만료됩니다. 토큰 사용이 필요한 시점에 6시간이 지난 토큰이라면 갱신하여 사용하시면 되며, 갱신되지 않은 토큰은 리프래시 토큰 만료 전에 갱신하시면 됩니다. 토큰 갱신 시, 리프레시 토큰이 같이 전달된다면, 이는 리프레시 토큰이 갱신된 경우 이므로 해당 토큰을 서비스측에 저장하여 사용하시면 계속 토큰을 갱신하실 수 있습니다

답변 감사합니다.
답변주신 내용에 대해서 헷갈리는 부분이 있습니다.

토큰 사용이 필요한 시점에 6시간이 지난 토큰이라면 갱신하여 사용하시면 되며

라고 답변해주셨는데요.

  1. 엑세스 토큰 발급 후 6시간이 지나기 전에 리프레시 토큰을 발급받아야 되는 게 아닌가요~?
  2. 엑세스 토큰은 최초 발급 시에 요청하는 거고 6시간 이후에도 인증/인가 정보를 계속 유지하고 싶으면 이때는 리프레시 토큰을 받는 거 아닌가요?

답변 부탁드립니다.

유효한 토큰으로 항시 갱신되어야 하는 시스템에서는 6시간 마다 갱신하시기도 하고, 토큰이 필요한 시점에 갱신하기도 합니다.

1:
회원수가 많은 시스템에서는 시스템측 자원을 고려하여 6시간마다 의무적으로 토큰을 갱신하지 않고, 보통 토큰 사용이 필요한 시점에 토큰 만료 여부를 확인하여 갱신합니다.
적은 회원수를 보유하고 있거나, 모먼트 처럼 특정 사용자들의 토큰을 계속 갱신하시길 원하신다면 일정 시간 마다 토큰을 갱신하셔도 됩니다.

2:
리프래시 토큰은 액세스 토큰을 갱신하기 위해 사용됩니다.
API 사용 시, 액세스 토큰이 필요한 경우 해당 토큰이 만료된 경우 리프래시 토큰으로 갱신하여 새로운 액세스 토큰을 발급 받아야 합니다.

하지만, 리프래시 토큰도 2달이라는 만료 기간이 있기에 리프래시 토큰도 갱신하여야 하며, 리프래시 토큰의 경우 액세스토큰 갱신 시, 갱신 가능한 경우(1달 이하 남은경우) 같이 갱신되어 전달합니다.

친절한 답변 감사합니다.

질문에서 재로그인 내용을 빠뜨렸네요.

질문의 의도는 6시간 이후에 갱신하면 해당 계정 사용자의 재로그인 절차가 필요하기 때문에
재로그인하지 않는 기준으로 질문을 드리고자 했는데 명확하게 질문을 드리지 못했네요.
다시 명확하게 질문을 드리자면,

로그인 절차가 번거롭기 때문에 재로그인 없이 계속 사용하려면

  • 6시간 이내에 리프레시 토큰을 발급해야 하고
  • 리프레시 토큰 발급 이후부터는 1년이든 2년이든 지속적으로 재로그인을 하지 않기 위해서는
    리프레스 토큰을 발급 후 갱신 가능한 시점(2달 끝나는 D-day 1~2일 전)마다 반복해서 갱신요청

해야 하는 게 맞는 건지 답변 부탁드립니다.

토큰은 접근토큰과 리프레시 토큰 두 종류가 있습니다.
접근토큰은 API 사용 시, 필요하며 리프레시 토큰은 접근토큰이 만료되었을 때, 갱신용도로 사용됩니다.

따라서, 재로그인 절차가 필요 없습니다.
접근토큰은 리프레시 토큰이 유효하다면 발급 받으실 수 있습니다.

다만, 리프레시 토큰도 유효시간(2달)이 존재하여 갱신이 필요하며, 갱신방법이 따로 있지 않고, 접근토큰 갱신 시, 갱신이 필요한 시점에 새 리프레시 토큰을 전달합니다.

즉, 6시간 간격마다 자동으로 갱신하는 시스템이라면 리프레시 토큰 갱신은 신경쓰실 필요 없이 해당 필드값이 전달되면 그 값을 서비스에 저장해 두면 됩니다.

여전히 이해가 어려워서 제가 예를 들어보겠습니다.

API 권한 획득한 비즈앱에 연동된 카카오 로그인 화면에서 A사용자가 최초 로그인한 상태라고 가정해보겠습니다.

질문
A사용자가 최초 로그인한 상태에서 6시간 경과 후에도 재로그인 절차 없이 API 호출이 가능한가요?
(REST API는 6시간 후 만료 정책때문에 질문드립니다.)

네,

접근 토큰 갱신은 사용자의 로그인을 반드시 필요로 하지 않습니다.

접근 토큰 갱신은 사용자가 카카오 로그인 하도록하여 인가코드를 사용하여 발급 받을 수 있지만,
이전에 발급 받았던 리프레시 토큰을 사용하여 갱신 가능합니다.

접근토큰과 리프레시 토큰은 서로 다른 토큰입니다.
토큰 갱신하기 API에는 사용자 접근 토큰을 요구하지 않고 refresh_token 만을 요구합니다.

REST API | Kakao Developers REST API - 토큰 갱신하기

제목을 리프레시 토큰에 대해서 문의드린다고 하여 혼동을 드렸네요.
토큰 전체적인 개념에 대해서 문의드립니다.

질문 1

  • 최초 로그인

상기의 상태라면
최초 로그인이기 때문에(토큰 갱신 요청을 하지 않은 상태)

  • 액세스 토큰만 발급
  • 리프레시 토큰은 미발급

상태 아닌가요?

질문 2

  • 최초 로그인 후 6시간 경과
  • 클라이언트에 유효한 카카오계정 세션 없음

상기의 상태라면
토큰 갱신 요청을 하지 않은 상태로 6시간이 경과되어 액세스 토큰이 만료되었기 때문에(REST API 기준)
해당 계정으로 API를 요청하려면 재로그인해야 하지 않나요?

질문 1:
토큰 발급 시, 리프레시 토큰 같이 발급됩니다.
토큰 받기 API 문서에서 응답되는 모든 값을 확인하실 수 있습니다.

REST API | Kakao Developers REST API - 토큰 받기

질문 2:
아닙니다.

카카오계정 세션을 서비스에서 고려하실 필요 없습니다.
서비스에서 사용자 정보에 접근하려면 접근토큰이 필요하고, 접근 토큰은 리프레시 토큰으로 갱신 가능합니다.

서비스측에서 재 로그인이 필요한 경우는 접근토큰과 리프레시 토큰 모두 만료되었을 때 입니다.

답변 감사합니다.
추가 질문드립니다.

질문 1
토큰 발급 시 refresh_token이 같이 발급되므로 토근 갱신하지 않아도 토큰 발급만으로 만료기간은 2달 인 거네요?

제가 헷갈렸던 첫 번째 이유
링크 걸어주신 토큰 받기 API도 다 확인했었지만
이해하기 | Kakao Developers 이해하기
[참고 : 토큰] 항목에서

  • 엑세스 토큰은 사용자 인증, 카카오 API 호출 권한 부여(REST API 기준 6시간 후 만료)
  • '리프레시 토큰은 액세스 토큰 재발급에 사용’으로 안내되어 있어서 토큰 발급 시 리프레시 토큰이 발급되어도 리프레시 토큰을 별도로 갱신 요청하지 않으면 REST API 기준으로 6시간 후 만료되는 것으로 오해하고 있었습니다.

제가 헷갈렸던 두 번째 이유
API 연동을 포스트맨으로 했는데
포스트맨에서는 ‘Expires at 4:02 pm today.’ 와 같이 액세스 토큰 발급 후 6시간 이후에 만료된다고 안내되고
실제로도 6시간 경과후에는 API 호출이 불가하며 액세스 토큰 재발급 요청을 하고 재로그인을 해야만 다시 API 호출이 가능합니다.
[Auto-refresh token > Your expired token will be auto-refreshed before sending a request.] 해당 옵션을 ON해도 동일했기에 첫 번째 헷갈렸던 이유 때문이라고 생각하게 됐습니다.

아무래도 실제 개발 연동과 포스트맨 연동과는 다른 차이점이 있나 봅니다.

아닙니다.
refresh_token 만 만료기간이 2달이며, access_token은 사용된 앱 키에 따라 다릅니다.(REST API 6시간)
access_token 갱신 시, refresh_token 만료기간이 1달 남았다면, refresh_token 값도 새로 갱신하여 같이 전달 드립니다.


포스트맨에서는 토큰 갱신 기능이 없기에 항상 새로 로그인 해야 합니다.
(최신 버전에서는 버튼으로 제공됨)

이제 이해가 되었습니다.
많은 질문에도 상세하게 답변해주셔서 감사합니다.