Kakao login api in java 401에러로 헤매고 있습니다 답변부탁드립니다ㅜ!

호출코드는 이것이구요.

https://kauth.kakao.com/oauth/token?grant_type=authorization_code&client_id=792e319a60f2f231a8c38cf3351994f2&client_secret=TdNAbQ7FOPQh2stqwzIiha1iJxCv6kV8&redirect_uri=http%3A%2F%2F127.0.0.1%2Flogin%2FkakaoCallback.do&code=u4UrWQYwHwMzvT3z2oI_QoxR3i5TaLXsqFxiD7tzNKNg7-pRcbCt_w0jljp9kdOGcKVvKgopdaYAAAFkHE1I7g

@RequestMapping("/login/kakaoCallback.do")
public String kakaoCallback(Model model, HttpServletRequest request) throws Exception {

	final String AUTH_HOST = "https://kauth.kakao.com";
    final String tokenRequestUrl = AUTH_HOST + "/oauth/token";

    String CLIENT_ID = keyMap.get("kakao_clientId"); // 해당 앱의 REST API KEY 정보. 개발자 웹사이트의 대쉬보드에서 확인 가능
    String CLIENT_SECRET = keyMap.get("kakao_clientSecret"); // 해당 앱의 REST API KEY 정보. 개발자 웹사이트의 대쉬보드에서 확인 가능
    
  final String AUTH_HOST = "https://kauth.kakao.com";
    final String tokenRequestUrl = AUTH_HOST + "/oauth/token";

    String CLIENT_ID = keyMap.get("kakao_clientId"); // 해당 앱의 REST API KEY 정보. 개발자 웹사이트의 대쉬보드에서 확인 가능
    
    String REDIRECT_URI = URLEncoder.encode("http://127.0.0.1/login/kakaoCallback.do", "UTF-8");
    String code = request.getParameter("code").trim();
    
    final String params = String.format("grant_type=authorization_code&client_id=%s&redirect_uri=%s&code=%s",
            CLIENT_ID, REDIRECT_URI, code);

	try {
		  URL url = new URL(tokenRequestUrl+params);

// JSONObject json = readJsonFromUrl(url,code);
// System.out.println(json);

	      javax.net.ssl.HttpsURLConnection con = (javax.net.ssl.HttpsURLConnection)url.openConnection();
	      con.setRequestMethod("POST");
	      con.setRequestProperty("Authorization", code);
	      int responseCode = con.getResponseCode();
	      
	      BufferedReader br;
	      System.out.print("responseCode="+responseCode);
	      if(responseCode==200) { // 정상 호출
	        br = new BufferedReader(new InputStreamReader(con.getInputStream()));
	      } else {  // 에러 발생
	        br = new BufferedReader(new InputStreamReader(con.getErrorStream()));
	      }
	      String inputLine;
	      StringBuffer res = new StringBuffer();
	      while ((inputLine = br.readLine()) != null) {
	        res.append(inputLine);
	      }
	      br.close();
	      if(responseCode==200) {
	      }
	    } catch (Exception e) {
	      System.out.println(e);
	    }
	
    return "callback";
}

REST API 키를 사용해서 server to server 연동을 하고 계신것 같네요.

관련 로그를 보니 REST API 키 노출에 의한 어뷰징을 막기 위해 제공하고 있는 IP 검증에서 문제가 된 것 같습니다.
해당 앱의 서버 IP 설정이 127.0.0.1 로 되어 있는데, 해당 설정을 서버 IP(source IP)로 변경하거나 해당 값을 제거하면 정상적으로 동작할 것 같습니다.

response 200 코드만 오고 실질적인 access_token 은 조회되지않습니다.
데이터를 가져오는 부분에 문제가 있는지요 ?..

POST /oauth/token 요청에 대헛 200을 리턴받았다면 json 포맷의 데이터에 access_token 데이터가 응답되도록 되어 있습니다.
본 글에서 공유해주신 앱키(client_id 파라미터)로 요청된 로그를 확인해보니 모두 IP 검증 에러가 응답된 것으로 확인됩니다.

정확한 요청 정보를 알려주시면 원인 파악에 도움이 될 수 있을 것 같아요~

사용자 정보 들고오기 카카오 테스트 예제를 참고하여 다시 요청했더니 이렇게 나옵니다.

위 답변처럼 server.xml 에서 수정하여 IP를 부여했습니다.
IP 검증 문제라면 어디를 수정해야하는지요 ??

Sending ‘POST’ request to URL : https://kauth.kakao.com/oauth/token
Post parameters : grant_type=authorization_code&client_id=792e319a60f2f231a8c38cf3351994f2&redirect_uri=http://127.0.0.1/login/kakaoCallback.do&code=muSnonZZmOTiY3HI22a610OKr6wkEAMlxTcdmWdXLy2zud8i6rzwkXLmDZmQ5T2QehcfnQo8BkMAAAFkIVdZbQ
Response Code : 401
java.io.IOException: Server returned HTTP response code: 401 for URL: https://kauth.kakao.com/oauth/token
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
at sun.net.www.protocol.http.HttpURLConnection$6.run(HttpURLConnection.java:1676)
at sun.net.www.protocol.http.HttpURLConnection$6.run(HttpURLConnection.java:1674)
at java.security.AccessController.doPrivileged(Native Method)
at sun.net.www.protocol.http.HttpURLConnection.getChainedException(HttpURLConnection.java:1672)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1245)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:254)
at com.sns.web.SnsController.kakaoCallback(SnsController.java:274)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:747)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:676)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:938)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:870)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:852)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at egovframework.rte.ptl.mvc.filter.HTMLTagFilter.doFilter(HTMLTagFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:620)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.io.IOException: Server returned HTTP response code: 401 for URL: https://kauth.kakao.com/oauth/token
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1627)
at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:468)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:338)
at com.sns.web.SnsController.kakaoCallback(SnsController.java:269)
… 36 more
Sending ‘POST’ request to URL : https://kapi.kakao.com/v1/user/me
Response Code : 401
java.io.IOException: Server returned HTTP response code: 401 for URL: https://kapi.kakao.com/v1/user/me
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
at sun.net.www.protocol.http.HttpURLConnection$6.run(HttpURLConnection.java:1676)
at sun.net.www.protocol.http.HttpURLConnection$6.run(HttpURLConnection.java:1674)
at java.security.AccessController.doPrivileged(Native Method)
at sun.net.www.protocol.http.HttpURLConnection.getChainedException(HttpURLConnection.java:1672)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1245)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:254)
at com.sns.web.SnsController.kakaoCallback(SnsController.java:332)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:747)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:676)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:938)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:870)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:852)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at egovframework.rte.ptl.mvc.filter.HTMLTagFilter.doFilter(HTMLTagFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:620)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.io.IOException: Server returned HTTP response code: 401 for URL: https://kapi.kakao.com/v1/user/me
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1627)
at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:468)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:338)
at com.sns.web.SnsController.kakaoCallback(SnsController.java:328)
… 36 more
Sending ‘POST’ request to URL : https://kauth.kakao.com/oauth/token
Post parameters : grant_type=authorization_code&client_id=792e319a60f2f231a8c38cf3351994f2&redirect_uri=http://127.0.0.1/login/kakaoCallback.do&code=X-78LzxtO2CCjDXaOg6UEMZOk-2m3RmgOSh_6ptHDb9b9K6FIsQte5NxZPp90y6YoyLD2Ao8BRIAAAFkIVfngQ

앱이름이 “정부입법” 이 맞나요?
그렇다면 해당 앱 설정 중 “허용 서버 IP 주소” 정보에 테스트하고 계신 서버의 공인 IP(source ip) 주소로 변경하시면 문제가 해결 될 것 같습니다.