안녕하세요.
refresh token 처리 로직은 기간을 계산해서 사용하지 마시고 아래와 같이 사용하시면 좋을 것 같습니다.
(1) 최초 카카오 로그인으로 액세스토큰과 리프레시 토큰 발급
(2) 재진입 시, 리프레시 토큰으로 액세스 토큰발급 : 토큰 갱신하기
(2-1) 리프레시 토큰 발급한지 1개월 이내면 토큰갱신하기 API 응답에 refresh_token값이 없습니다.
{
"access_token":"{ACCESS_TOKEN}",
"token_type":"bearer",
"expires_in":43199,
}
(2-2) 리프레시 토큰 발급한지 1개월이 넘어가면 토큰갱신하기 API 응답에 refresh_token이 재발급되고 기존 리프레시 토큰은 남은 기간에 상관없이 즉시 만료 됩니다.
{
"access_token":"{ACCESS_TOKEN}",
"token_type":"bearer",
"refresh_token":"{REFRESH_TOKEN}", //optional
"refresh_token_expires_in":25184000, //optional
"expires_in":43199,
}
즉,
리프레시토큰 발급 1개월이 경과한 시점 부터 2개월 사이에 토큰 갱신하기 호출은 정상 처리되나
남은 기간에 상관없이 갱신 즉시 기존 refresh_token토큰 만료되므로
남은 기간 체크가 아니라, 토큰갱신하기 API 응답에 refresh_token이 전달되면 기존 refresh_token을 업데이트하도록 로직 구성하면 좋을 것 같습니다.
또한,
refresh_token을 업데이트 실패하는 여러가지 시스템적 문제상황을 대비해
토큰갱신하기 API 응답에 아래와 같이 refresh_token토큰 에러가 전달되면, 카카오 로그인 처리 할 수 있도록 Flow구성하면 좋을 것 같습니다.
{"error":"invalid_grant","error_description":"expired_or_invalid_refresh_token","error_code":"KOE322"}
[요약]
(1) 갱신 시간을 체크하지말고, 토큰갱신하기 API 응답에 refresh_token 전달 여부에 따라 로직 구성
(2) refresh_token만료된 상황을 대비한 flow 구성