초보 개발자 로컬환경에서 카카오톡 로그인 작업 중인데 401 Unauthorized로 로그인이 되지않습니다

jsp
a href=“https://kauth.kakao.com/oauth/authorize?response_type=code&client_id=da15e9ef21174189e71dc36b15a5a94e&redirect_uri=http://localhost:8080/login

=> 반환되는 코드
ya3J5jFCTqOBIpgSi3fBfrg1V9PlcTDaszmV_CvhZtheAMzBP4P57tDN40t4FxoVCGBA1go9c-sAAAF6GI7i0w

controller
@RequestMapping("/login")
public String login(@RequestParam(“code”) String code) throws Exception {
String accessToken = kakaoAPI.getAccessToken(code);
System.out.println("controllerToken = " + accessToken);
return “/index”;
}

service
public class KakaoAPI {
public String getAccessToken(String authorize_code) {
String access_Token = “”;
String refresh_Token = “”;
String reqURL = “https://kauth.kakao.com/oauth/token”;

        try{
            URL url = new URL(reqURL);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();

            //    POST 요청을 위해 기본값이 false인 setDoOutput을 true로
            conn.setRequestMethod("POST");
            conn.setDoOutput(true);

            //    POST 요청에 필요로 요구하는 파라미터 스트림을 통해 전송
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(conn.getOutputStream()));
            StringBuilder sb = new StringBuilder();
            sb.append("grant_type=authorization_code");
            sb.append("&client_id={RESTAPI_KEY}");
            sb.append("&redirect_uri=http://localhost:8080/login");
            sb.append("&code=" + authorize_code);
            bw.write(sb.toString());
            bw.flush();

            //    결과 코드가 200이라면 성공
            int responseCode = conn.getResponseCode();
            System.out.println("responseCode : " + responseCode); <-**401**

            System.out.println(conn.getResponseMessage()); <- **Unauthorized**

            //    요청을 통해 얻은 JSON타입의 Response 메세지 읽어오기
            BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            String line = "";
            String result = "";

            while ((line = br.readLine()) != null) {
                result += line;
            }
            System.out.println("response body : " + result);

            //    Gson 라이브러리에 포함된 클래스로 JSON파싱 객체 생성
            JsonParser parser = new JsonParser();
            JsonElement element = parser.parse(result);

            access_Token = element.getAsJsonObject().get("access_token").getAsString();
            refresh_Token = element.getAsJsonObject().get("refresh_token").getAsString();

            System.out.println("access_token : " + access_Token);
            System.out.println("refresh_token : " + refresh_Token);

            br.close();
            bw.close();
        } catch (Exception e){
            e.printStackTrace();
        }
        return access_Token;
    }

}

error
java.io.IOException: Server returned HTTP response code: 401 for URL: https://kauth.kakao.com/oauth/token

플랫폼
WEB
사이트도메인 http://localhost:8080

Redirect URI
http://localhost:8080/login

==============================================================================================================
RESTAPI_KEY는 developers -> 내 내플리케이션 -> 앱키 -> REST API 키 에 있는 값을 입력했습니다.

https://antdev.tistory.com/36

바로 위의 링크를 보고 작업을 했습니다.
그대로 따라치면서 REST_API_KEY 나 redirect_uri만 제가 작업하는 내용으로 변경했습니다.

그리고 결과가 부분에 해당하는 결과로 출력됩니다.

에러내용이 권한 승인 문제라고 알고있는데
https://developers.kakao.com/docs/latest/ko/kakaologin/prerequisite
이 링크에 적힌 활성화설정, Redirect URI 외에 더 설정해야 할 것이 있나요?
내 애플리케이션 -> 플랫폼 -> WEB에 http://localhost:8080을 입력해놓은 상태입니다.

안녕하세요~!~

{"error":"invalid_client","error_description":"Bad client credentials","error_code":"KOE010"}

Bad client credentials 에러가 발생하고 있습니다. Client Secret를 사용 안함으로 설정해주세요~

내 애플리케이션>제품 설정>카카오 로그인>보안 : Client Secret

아!! 정말 감사합니다.! client secret의 설정을 변경하니 바로 에러없이 return이 됩니다!
제가 다른 설정을 하면서 실수로 설정을 했던 모양이네요!

답변해주셔서 정말로 감사드립니다!

1개의 좋아요

Client Secret가 생성이 안돼있는데도 같은 오류가 나오는데 사용안함으로 어떻게 하나요?

Client Secret 설정하지 않았지만 해당 오류 발생하는 경우 아래 FAQ를 참고 부탁드립니다.

KOE010 (Bad client credentials) 에러가 발생할 때

댓글을 잘못달았네요.!
카카오 로그인을 활성화 하면은 자동으로 client secret는 활성화 되는 것 같은데
기본적으로 비활성화 상태인건가요?

제가 혹시 몰라서 clientsecret 생성을 해봤는데
활성화 상태는 비활성화로 떠있네요

@wlsgusrb78
디벨로퍼스 설정에 비활성화로 되어 있다면 client secret 체크를 하지 않습니다.

위에 안내 받으신 것처럼 Request가 잘못된 상황으로 운영하신 디벨로퍼스앱으로 요청이 안들어간 것으로 추정됩니다.