로그인 버튼 클릭시 javascript 의 Kakao.Auth.authorize 를 실행해서 인증 code를 받았습니다.
그후 브라우저에서 redirect_uri 로 리턴이 되는데, 한번은 kauth.kakao.com/oauth/authorize?client_id=… 주소에서 리턴을 하고,
그후 바로 kakao.js 에서 리다이렉트다시 하면서 위 요청을 취소시키고 access_token을 재 요청 받아 400에러를 리턴합니다.
Kakao.Auth.authorize는 인증 코드를 발급하여 서비스 서버의 redirect_uri로 redirect 시킵니다.
위 동작이 rest api를 통한 코드 발급과 동일하나 js sdk 사용 시 카카오톡을 통한 간편로그인으로 코드 발급이 가능하여 웹 브라우저에서는 js sdk를 통한 로그인을 권장합니다.
말씀하신 내용이 무엇인지, 그리고 문제가 무엇인지 이해가 잘 가지 않는데요.
Kakao.Auth.authorize를 호출하였을 때부터 서비스 서버의 redirect_uri로 redirect 하기까지의 과정에 대해서 말씀하신건가요, 혹은 이후에 대해서 말씀하신건가요?
문제를 재현 가능한 URL을 주실 수 있을까요?
문제는 Kakao.Auth.authorize를 호출해서 redirect_uri 로 다시 돌아올때 문제가 됩니다.
지금 체크해보니 이미 카카오 아이디로 로그인되어있는 세션이 있는 상태에서만 발생하네요.
즉, Kakao.Auth.authorize (이미 카카오에 로그인 되어있음) 호출후 바로 redirect_uri 페이지로 돌아옵니다.
이때 redirect_uri로 돌아가는 과정에서 하나는 카카오 웹 kauth.kakao.com/oauth/authorize?client_id=… 주소서 location 으로 돌려주고 그후 바로 또 javascript SDK 에서 페이지 이동을 합니다. sdk 소스 1267라인을 보니 자바 스크립트에서도 리다이렉션을 시키는 코드가 있더군요.
redirect_uri 에서 돌아오면 바로 access_token을 요청하는데 위에 첨부 이미지처럼 두번을 요청하기에 두번째는 에러가 발생합니다.
이미지 보시면 두번 요청이 서로 다른곳에서 바로 이어서 나오는것 보실 수 있을겁니다.
참고로 크롬, 맥에서 테스트중입니다.
그와 동시에 두군데서 redirect를 발생하여 이전에 처리중인 페이지가 중지되고 다시 redirect 요청이 옴 (이전 첨부 이미지 1267라인) (kauth.kakao.com/oauth/authorize?client_id=… 에서 리다이렉트 되서 token을 요청하고 추가 정보를 얻고 있는중 sdk에서 리다이렉트를 또해서 이전 프로세스가 중지됨)
즉, 한번의 요청으로 카카오 웹페이지에서의 리다이렉트와 자바스크립트sdk 에서의 리다이렉트가 두번 일어난다는겁니다.
검색을 좀 해보니 400 오류가 난다는 글이 몇개 있어서 보니깐 같은 code로 두번 access_token을 요청하면 400에러를 발생한다고 하더군요. 아마도 그래서 400오류가 나는듯 합니다.
일단 sdk 사용안하고 바로 /oauth/authorize? 로 url 만들어서 로그인처리는 하게했습니다.