문제점 & 삽질 과정
카카오 로그인을 진행하면서, 토큰을 가져오는 단계에서 문제가 발생했다.
401 Unauthorized: [no body]
https://kauth.kakao.com/oauth/token
위 경로로 데이터를 보내 accessToken과 refreshToken을 받아와야 하는데, 401 Unauthorized 에러가 발생했다.
구글링을 통해 찾아본 결과 의심되는 상황은 아래와 같이 있었다.
Content-type: application/x-www-form-urlencoded 미설정
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
위 처럼 header에 ContentType을 urlencoded로 꼭 지정해주어야만 한다.
허용서버 IP 주소 설정
- Kakao Developers 페이지에서 허용 서버 IP주소를 설정해주지 않은 경우이다.
- 따로 지정은 안해두면 문제가 발생할 일이 아니라 나의 케이스에는 맞지 않았던 것 같다.
Redirect uri 정보가 등록되지 않았거나 틀림
- Kakao Developers 페이지에 Redirect uri가 제대로 추가되어 있는지, 코드 상에서 잘못 입력해두진 않았는지를 점검해보길 바란다.
인가 코드 값이 잘못 되었거나 토큰 발급 요청을 2회 이상 재사용 함
- token 값을 받아오기 전에 https://kauth.kakao.com/oauth/authorize 에 요청을 보내 인가 코드 값을 받아와야지 token을 발급 받을 수 있다.
- 이 때, code를 잘못 입력하거나 같은 code 값으로 2번이상 요청하면 에러가 발생한다.
- 이 점을 유의해서 코드를 작성하도록 하자.
정보 값이 틀려 제대로 전달되지 않음
- 입력 값이 틀린 경우에도 같은 에러가 발생한다는 것을 알게되었다.
- 파라미터 이름이 다르거나 전달 값이 다른 경우에도 같은 에러가 발생하니 다시 한 번 주의하자.
- 위 경우 중 필자는 Content-type, Redirect uri는 분명히 맞게 설정하였고,
IP 문제도 아니었기에 Kakao Developers 에서 제공하는 Client Secret 기능을 꺼보기로 하였다. - 정상적으로 작동하는 것을 확인했고, 이유를 찾아보았더니 요청 시 파라미터 이름을 잘못 적은 것이 화근이었다.
- secret_key (x) ⇒ client_secret (o)
다른 참고 자료들에서 client_secret을 잘 사용하지 않아 알아내는데 시간을 쏟게 되었다.
앞으로는 공식문서와 함께 코드를 점검해보는 시간을 먼저 갖고 구글링 해보는 습관을 가져야 될 것 같다.
yml 파일에서 logging 레벨을 DEBUG로 설정하면 에러 코드가 함께 나와 파악하기 편하니 참고하자.
logging:
level:
org.springframework.web: DEBUG