2시간마다 access token을 갱신하는 코드를 작성했습니다.
그런데 초반에는 토큰 갱신이 잘 되는데
하루정도 지나면
data: {
error: ‘invalid_grant’,
error_description: ‘expired_or_invalid_refresh_token’,
error_code: ‘KOE322’
}
이런 에러를 만들면서 토큰을 제대로 갱신시켜 주지 않습니다.
그래서 데브톡 검색을 해봤는데
https://devtalk.kakao.com/t/notice-unlink-for-users-who-have-not-completed-a-signup/111463
이런게 있는데 저희는 프로필이름, 이메일, 친구목록, 프로필사진 전부 사용하고 있는데
저기에 있는 모든 요소들을 한번씩 호출해야 사라지지 않는건가요?
(만약 프로필을 사용하고싶으면 적혀있는 3개 모두 호출해야하나요?)
현재 /v2/user/me , /v1/api/talk/friends 를 앱 가입시 호출하고 있는데
왜 저런 에러가 나오는지 잘 모르겠습니다.
앱 ID는 666535입니다.
감사합니다.
안녕하세요!
토큰 갱신 요청에 사용하신 리프레시 토큰을 전달해주시면 해당 토큰이 만료되는 이유 확인해보도록 하겠습니다
안녕하세요.
만료됬다고 뜨는 리프레시 토큰입니다.
-
tSx-ILEB-YChgMchUon2PIBfxpTalWvB9U0Dvgo9c5oAAAF9lO-1Gg
-
yatYfsNND_OYySc_ljPPF3QRoPfhzFb9bpxdjAopb7gAAAF9mgoihw
전달해주신 리프레시 토큰이 사용된 갱신 요청 확인해봤습니다.
말씀해주신 것 처럼 가입 미완료자로 분류되어 연결이 끊어지는 것은 아닌 것으로 확인했습니다.
해당 사용자들의 로그인 요청을 봤을 때, 토큰 발급 요청(엑세스 토큰과 리프레시 토큰이 함께 발급되는 요청)이 많은 것으로 보이는데요
한 계정에서 너무 많은 리프레시 토큰을 발급받아서 오래된 리프레시 토큰들이 만료처리 되었습니다.
한 계정에서 토큰 발급 요청으로 엑세스 토큰과 리프레시 토큰을 발급받고 난 뒤에는
토큰 발급 요청대신 리프레시 토큰을 사용한 토큰 갱신 요청을 해주시면 위 현상이 발생하는 것을 막으실 수 있습니다.
API document를 보면
refresh_token: 갱신된 사용자 리프레시 토큰 값, 기존 리프레시 토큰의 유효기간이 1개월 미만인 경우에만 갱신
라고 나오는데 실제로 Rest API로 호출을하면 리프레시토큰도 새로운게 발급되어 나오는데
해당 내용과 관련이 있을까요?
제가 API를 부를땐 1개월 미만이 아닌데도 새로운 리프레시 토큰이 나오는것같습니다.
토큰 갱신 요청에 사용된 리프레시 토큰의 유효기간이 1달 미만으로 남은 경우에만 응답에 새로운 리프레시 토큰이 전달되는데요
응답에 새로운 리프레시 토큰이 포함된다면 토큰이 갱신된 것이 아니라 토큰을 새로 발급받으신것 같습니다.
토큰 갱신 요청을 위해서는 grant_type
파라미터 값으로 refresh_token
을 주시고,
refresh_token
파라미터에 갱신에 사용할 리프레시 토큰을 전달해주셔야 하는데요.
혹시 grant_type
을 authorization_code
로 전달하시는 것은 아닌지 확인 부탁드립니다.
토큰 갱신 요청과 관련된 가이드는 아래 문서에서 확인하실 수 있습니다.
요청코드와 요청결과 업로드 해보겠습니다.
유저1)
2021-12-09T03:06:18.277Z |
INFO |
요청 전 refresh: fifJBllNEUZ4_vSWXe_Tpr1_p2NkBjlNZLEs_Qo9dGkAAAF9nQQ7Iw |
2021-12-09T03:06:18.289Z |
INFO |
요청 후 : bS52QfzIog4PIICnddUii7H3uodGZhJzRNnm2Ao9dVsAAAF9nSfo2A |
유저2)
2021-12-09T03:06:18.560Z |
INFO |
요청 전 refresh: dtqNeATkIwNmg8pYNGJFXM3A5LIG7tMPKdqxZAo9cxgAAAF9nQ0KMg |
2021-12-09T03:06:18.560Z |
INFO |
요청 후 : TRIgA1SJoUMY5L-nOKOKToYxBubpAzw2UJ7F1Ao9dNoAAAF9nSfp8w |
요청이미지
리프레시토큰이 계속 갱신되고 있는건 알고있으나 2달이내로는 재사용 발급받을 필요가 없어서 그부분은 받지 않고 갱신시키고 있어서 처음 문제가 생겼던거 같은데 이것은 왜 계속 재발급 되는걸까요?
현재 토큰 발급을 위해 JS-SDK의 Kakao.Auth.login 또는 Kakao.Auth.createLoginButton을 사용하고 계신것으로 보입니다.
해당 함수로 토큰을 발급받는 경우 리프레시 토큰을 이용한 토큰 갱신 요청이 정상 동작하지 않습니다.
만약 토큰 갱신이 필요하시다면 Kakao.Auth.authorize 함수를 이용해서 인가코드를 얻은뒤 서버에서 토큰 요청을 해주시면 됩니다.
Kakao.Auth.authorize 함수 가이드는 아래 문서 참고 부탁드립니다.
감사합니다.
말씀주신대로 해보고
추후에 문제가 생기면 추가로 질문드리겠습니다.