안녕하세요
요 근래 들어 저희 쪽에 KOE320 에러 로그가 계속 찍히고 있어 문의하려고 합니다.
KOE320 에러가 같은 인가 코드를 두 번 이상 사용할 때 발생하는 에러인 점은 인지하고 있습니다.
사용자가 로그인 버튼을 누른 후 카카오 쪽에서 저희 쪽으로 리다이렉트를 해줄 때 queryString으로 넘겨주는 인가 코드를 받아서 따로 저장하지 않고 한 번만 사용하고 있는데 KOE320 에러가 발생하고 있습니다.
다만 이상한 점은 단시간 내에 여러 번 요청하는 로그도 있지만 장시간 뒤에 같은 인가 코드로 요청을 하는 경우도 있다는 점입니다.
첨부해드린 이미지를 보시면 사용자가 17시19분에 인가 코드를 발급받아 로그인에 사용을 했고 정상적으로 로그인이 되었습니다.(오른쪽 로그) 그런데 같은 사용자가 22시17분에 다시 로그인을 시도할 때, 17시19분에 받아서 이미 사용한 같은 인가 코드를 또 사용하고 있습니다.(왼쪽 로그) (해당 로그에 찍힌 시간은 실제 인가 코드 발급 시간과 약간의 편차가 있을 수 있습니다.)
저희 쪽에서는 인가 코드를 저장하지 않기 때문에 해당 상황이 어떻게 발생하는지 추측하기 어려운 상태입니다.
혹시 인가코드 발급 쪽에 문제가 있거나 리다이렉트가 여러 번 되는 문제가 있는지 확인이 가능하실까요?
앱 id는 621235 입니다.
감사합니다.
안녕하세요.
접근 토큰 발급 시, 인가코드가 아닌 서비스측 JWT 을 전달하고 있습니다.
서비스측 로직을 확인해 보시는게 좋을것 같습니다.
현재 Kakao.Auth.authorize 를 통해 인가코드를 얻고, https://kauth.kakao.com/oauth/token 여기에 인가코드를 그대로 넣어서 post 요청을 하고 있습니다.
만약 인가코드가 아닌 서비스측 JWT를 넣어서 보낸다면 애초에 접근 토큰 발급이 불가능해서 사용자 정보를 얻어올 수 없을텐데 정상적으로 사용자 정보를 얻어 오는 케이스가 대부분입니다. 또한 KOE320 에러가 발생한다는 것은 두 번째 접근 토큰 발급 요청 시에 넣어준 인가 코드가 이미 사용되었다는 것을 확인할 수 있다는 것인데, 만약 서비스측 JWT를 넣었다면 애초에 KOE320 에러가 아니라 다른 에러가 발생하는 것이 맞지 않나요?
혹시 접근 토큰 발급 시 인가코드가 아닌 서비스측 JWT를 전달했다라는 것은 어떤 것을 보고 판단을 할 수 있는건지 알 수 있을까요?
KOE320 오류는 유효하지 않은 인가코드를 사용 시, 발생하는 오류 입니다.
즉, 동일한 인가코드를 2번 사용하거나, 발급받지 않은 인가코드를 사용해도 유효한 코드가 아니기에 KOE320 오류가 발생합니다.
서비스측 JWT 토큰 전달은 서비스측 로직을 확인해 보셔야 합니다.
카카오 로그인 후, 카카오 서버에서 서비스측 redirect_uri 로 302 리디렉션 됩니다.
이 때, code 파라미터로 인가코드가 같이 전달되는데요 서비스측 백앤드에서 전달되 code 파라미터를 그대로 사용하는지 확인해 보셔야 할것 같습니다.
KOE320 오류에 대해 말씀해주신 내용은 이해 했습니다. 다만 아까 스크린샷 첨부할 때 개인정보 때문에 첨부하지 않은 내용이 있는데 개인정보를 가리고 다시 첨부하였습니다.
첫 번째 스크린샷의 첫 번째 로그를 보시면 프론트에서 인가코드를 발급받고, 발급받은 인가코드를 백엔드에 전달한게 로그로 남아있습니다.(17시 19분) 그 다음 https://kauth.kakao.com/oauth/token 여기로 post 요청을 보낼 때 인가코드를 그대로 넣어줬습니다. 이후 발급받은 접근 토큰으로 사용자 정보를 얻어온 것이 첫 번째 스크린샷의 두 번째 로그에 남아 있습니다.(property를 보시면 카카오 쪽에서 전달해준 사용자 정보 그대로 로그에 찍혔다는 것을 알 수 있습니다.) 이를 통해 접근 토큰 발급 요청 시 서비스쪽 JWT를 넣어주는 것이 아니라 카카오로부터 발급 받은 인가코드를 그대로 넣어줬고, 정상적으로 접근 토큰을 발급받아 사용자 정보를 얻어온 것을 확인할 수 있습니다.
두 번째 스크린샷의 첫 번째 로그를 보시면 프론트에서 인가코드를 발급받고, 발급받은 인가코드를 백엔드에 전달한게 로그로 남아 있는데 앞서 17시 19분에 발급받은 인가코드와 똑같은 인가코드가 전달되고 있습니다.(22시 17분, 약 5시간 차이) 이로 인해서 접근 토큰 발급 요청은 400 error를 받게됩니다. 앞서 말씀드렸지만 인가코드는 재사용이 불가능하다는 것을 알고 있기 때문에 프론트엔드나 백엔드 어디에서도 인가코드를 저장하고 있지 않습니다. 그런데도 장시간 후에 똑같은 인가코드를 받았다는게 이상해서 확인 요청을 드렸던 것입니다.
어느 부분을 다시 보면 될지 확인 부탁드리겠습니다.
감사합니다.
17:19:42 에 사용된 인가코드는 17:19:47, 22:17:07 에 다시 사용되어 2번의 KOE320 오류가 발생되었습니다.
해당 인가코드는 카카오에서 한번만 발행된 코드 입니다.
인가코드는 카카오 로그인 시, 카카오 서버에서 사용자의 카카오 로그인 응답으로 302 리디렉션으로 서비스측으로 한번만 전달 됩니다. 때문에, 같은 인가코드 재 사용은 서비스측 버그를 의미 합니다.
카카오 로그에는 서비스측 JWT 전달 이력도 발견됩니다. 때문에 백앤드 로직을 점검 부탁드리며 프론트에서도 redirect_uri 로 잘못 이동시키지는 않는지 확인 부탁드립니다.