카카오 로그인 token 관련 질문

문의 시 사용하시는 SDK 버전 정보를 알려주세요.
버전: user-v2:2.5.2

현재 안드로이드 앱에서 카카오 SDK 통해서 로그인을 하여 발급 받은 토큰을 가지고
인증을 위해서 저희쪽 서버에서 Rest API 통해서 토큰 정보 보기를를 호출하였을 떄 {“msg”:“this access token does not exist”,“code”:-401} 에러가 간혹 발생하고 있습니다. 현재 저희 로직은 아래의 로직으로 호출하고 있는데 문제가 될 상황이 있을까요?

  1. 카카오 유저 로그아웃 - 기존에 로그인 된 정보를 삭제하기 위함
  2. 로그아웃 완료 후 카카오 로그인 호출
    • 카카오톡 설치 기기 → 카카오톡 로그인 호출
    • 카카오톡 미설치 기기 → 카카오 계정 로그인 호출
  3. 로그인 성공 → 발급 받은 토큰과 함께 서버로 로그인 요청
  4. 서버에서 클라이언트 앱으로 부터 전달 받은 토큰을 카카오 Rest API를 통해서 토큰 정보보기 호출

위 질문에 답변 주신 내용으로는 SDK상에서 토큰이 만료되면 내부적으로 갱신하는 로직이 있다고 말씀해주셨는데, 현재 저희쪽에서는 SDK에서 발급 받은 토큰을 바로 저희쪽 서버를 통해서 인증을 하고 있는데 에러가 발생하고 있습니다.

안녕하세요~

에러 상황 확인을 위해 앱 ID 알려주세요~


앱ID
https://developers.kakao.com/ 의 내 애플리케이션>앱 설정>요약 정보 : 기본정보에 있는 앱 ID
숫자로된 ID 입니다~
ex) 123456

@tim.l
id 157929 입니다.

최근 2주간 로그를 보니

  1. 토큰 만료 에러는 /v1/user/logout 호출 시에 이미 만료된 토큰으로 요청한 경우만 발견됩니다.
    {“code”:-401,“msg”:“this access token is already expired”}

  2. /v1/user/access_token_info 토큰 정보 보기 호출 시에는 401 로그를 조회하지 못했어요.

토큰 정보 보기 401에러 발생할때 사용한 토큰 정보 알 수 있을까요?

@tim.l
8월 1일자로 아래의 토큰에서 -401 코드로 처리 되었습니다.
oMDIu-w_N0IJyxH5WJrIwHDQszevj4e4aqkRwgo9dRkAAAF7AWg20g

2021-08-01 11:10:12 토큰 생성
2021-08-01 23:10:12 (토큰의 만료 시간)

API 정상 호출 이력
2021-08-01 20:12:20.504 /v2/user/me 200
2021-08-01 20:12:19.902 /v1/user/access_token_info 200
2021-08-01 20:10:13.049 /v2/user/me 200
2021-08-01 20:10:12.414 /v1/user/access_token_info 200
2021-08-01 20:10:12.220 /v2/user/me 200

{“id”:1549815621,“expiresInMillis”:43072277,“app_id”:157929,“appId”:157929,“expires_in”:43072}

401 에러 이력 조회가 안되는데요. 호출 시간대 확인 가능하신가요?

죄송합니다. 토큰 전달 드릴 때 잘 못된 토큰을 전달드렸네요. 아래의 토큰으로 확인 부탁드립니다.

발생일시: 2021년 8월 1일 8시 10분 12초경
토큰: Nc84qjKvZjXwCIyUBotRXkaAqG_l_f-0zNESdAo9dRkAAAF7AWg1Zg

2021-08-01 11:10:11 토큰 생성

API 정상 호출 이력
2021-08-01 20:10:11.916 /v1/user/logout 200
2021-08-01 20:10:11.869 /v2/user/me 200

20:10:11.916 이후 호출 하셨다면 로그아웃 했으므로 토큰 만료 401 에러가 발생할 것 같긴한데요.
해당 토큰으로 401 에러는 없었습니다.

명시적 로그아웃 상황인 것 같은데요. 로그아웃 후, /v1/user/access_token_info 와 /v2/user/me 호출 해보시겠어요?
재현과 별개로 토큰 만료 시, 재로그인하거나 리프래시 토큰으로 토큰 갱신이 필요해보입니다.

처음 문의글에 저희 시나리오를 설명 드렸는데, 다시 한번 명확하게 하기 위해서 재차 설명드립니다.

  1. 앱에서 유저가 카카오 로그인 버튼 클릭
  2. 이전 로그인 된 정보를 삭제하기 위하여 카카오 user SDK로 logout 호출 (UserApiClient.logout() 호출)
  3. logout 완료 후, 카카오 SDK 로그인 호출
  • 카카오톡 설치 기기 -> 카카오톡 로그인 호출 (UserApiClient.loginWithKakaoTalk() 호출)
  • 카카오톡 미설치 기기 -> 카카오 계정 로그인 호출 (UserApiClient.loginWithKakaoAccount 호출)
  1. 로그인 성공시 발급 받은 토큰을 저희쪽 인증 서버로 전달
  2. 인증 서버에서 전달받은 토큰이 유효한지 카카오 rest api로 토큰 정보보기 호출

위의 시나리오를 봤을 때 로그아웃 된 토큰이 저희쪽으로 발급된 것 같아서요. 확인 부탁드립니다.

위에 기재해주신 토큰을 기준으로 말씀하신 Flow 살펴봤습니다.

  1. 2021-08-01 20:10:11.916 /v1/user/logout 200
    8월 1일 20시 10분 11초 로그아웃 이후, 사용자 정보조회와 토큰 정보보기가 모두 성공한 이력만 있습니다.
	August 1st 2021, 20:12:20.504	/v2/user/me	200
	August 1st 2021, 20:12:19.902	/v1/user/access_token_info	200
	August 1st 2021, 20:10:13.049	/v2/user/me	200
	August 1st 2021, 20:10:12.414	/v1/user/access_token_info	200
	August 1st 2021, 20:10:12.220	/v2/user/me	200
	August 1st 2021, 20:10:11.916	/v1/user/logout	200
	August 1st 2021, 20:10:11.869	/v2/user/me	200
  1. 8월 1일 20:10:11.819 토큰 정상 발급 후 20:10:11.916 로그 아웃 했고
    20:10:12.183 다시 토큰 받았습니다. 토큰은 동일하지 않습니다.
    토큰 정보에는 생성일시 및 각종 정보를 포함하여 암호화하기때문에 같은 값 특히 만료된 값이 전달될 확률은 없습니다.

[ 20:10:12.183 ] oMDIu-w_N0IJyxH5WJrIwHDQszevj4e4aqkRwgo9dRkAAAF7AWg20g
[ 20:10:11.819 ] Nc84qjKvZjXwCIyUBotRXkaAqG_l_f-0zNESdAo9dRkAAAF7AWg1Zg

	August 1st 2021, 20:10:12.183	/oauth/token	200
	August 1st 2021, 20:10:12.107	/oauth/authorize	302
	August 1st 2021, 20:10:11.819	/oauth/token	200
	August 1st 2021, 20:10:11.742	/oauth/authorize	302

로그상 명시적 401에러를 로그아웃 API 말고는 조회 할 수 없는데요.
로그아웃 후, /v1/user/access_token_info 와 /v2/user/me 호출 테스트로 재현 가능한지 확인 부탁드립니다.