강의

멘토링

로드맵

Inflearn Community Q&A

lulook1562's profile image
lulook1562

asked

Learning React 19 with Spring Boot API Server through Coding

API서버에서 사용자 정보 추출하기(2)

9장 API서버에서 사용자 정보 추출하기 호출 오류 문의

Written on

·

338

0

카카오로 access토큰 받아오고 나서

api서버에서 kakao로 사용자 정보 호출 시 오류가 나네요..

어떤 부분을 수정해야 할지 잘 감이 안오네요.

 

Not injecting HSTS header since it did not match request to [Is Secure]

image.png

--아래 로그

1-28T17:15:42.369+09:00 TRACE 26452 --- [apiserver] [nio-8080-exec-2] o.s.security.web.FilterChainProxy : Invoking ExceptionTranslationFilter (13/13)

2024-11-28T17:15:42.369+09:00 DEBUG 26452 --- [apiserver] [nio-8080-exec-2] o.s.security.web.FilterChainProxy : Secured GET /api/member/kakao?accessToken=s0KvFDK1upVad8mdV-4lSc8WG_NwqUV7AAAAAQoqJVAAAAGTcdcZj6ew61y3DOUZ

2024-11-28T17:15:42.370+09:00 INFO 26452 --- [apiserver] [nio-8080-exec-2] o.z.a.controller.SocialController : accessToken : s0KvFDK1upVad8mdV-4lSc8WG_NwqUV7AAAAAQoqJVAAAAGTcdcZj6ew61y3DOUZ

2024-11-28T17:15:42.372+09:00 INFO 26452 --- [apiserver] [nio-8080-exec-2] o.z.apiserver.service.MemberServiceImpl : response 1------------------------------

2024-11-28T17:15:42.405+09:00 TRACE 26452 --- [apiserver] [nio-8080-exec-2] o.s.s.w.header.writers.HstsHeaderWriter : Not injecting HSTS header since it did not match request to [Is Secure]

2024-11-28T17:15:42.405+09:00 ERROR 26452 --- [apiserver] [nio-8080-exec-2] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: org.springframework.web.client.ResourceAccessException: I/O error on GET request for "https://kapi.kakao.com/v2/user/me": PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target] with root cause

sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

at java.base/sun.security.provider.certpath.SunCertPathBuilder.build(SunCertPathBuilder.java:148) ~[na:na]

at java.base/sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:129) ~[na:na]

at java.base/java.security.cert.CertPathBuilder.build(CertPathBuilder.java:297) ~[na:na]

 

 

-- 소스코드

private void getEmailFromAccessToken(String accessToken) {
    String kakaoGetUserURL = "https://kapi.kakao.com/v2/user/me";

    if(accessToken == null){
        throw new RuntimeException("Access Token is null");
    }

    RestTemplate restTemplate = new RestTemplate();

    HttpHeaders headers = new HttpHeaders();
    headers.add("Authorization", "Bearer " + accessToken);
    headers.add("Content-Type","application/x-www-form-urlencoded");
    HttpEntity<String> entity = new HttpEntity<>(headers);

    UriComponents uriBuilder = UriComponentsBuilder.fromHttpUrl(kakaoGetUserURL).build();

    log.info("uriBuilder " + uriBuilder);
    log.info("response 1------------------------------");
    ResponseEntity<LinkedHashMap> response =
            restTemplate.exchange(
                    uriBuilder.toString(),
                    HttpMethod.GET,
                    entity,
                    LinkedHashMap.class);


    log.info("response 2------------------------------");
    log.info(response);
reactspring-bootjpajwtredux-toolkit

Quiz

카카오 소셜 로그인 과정에서 인가 코드(Authorization Code)의 주요 목적은 무엇일까요?

사용자에게 보여줄 카카오 동의 화면 생성

Access Token을 발급받기 위한 교환 수단

카카오 개발자센터 설정 확인

사용자의 비밀번호 재설정 요청

Answer 2

0

zk202308a5410님의 프로필 이미지
zk202308a5410
Instructor

이건 프로젝트를 실행해 봐야 정확한 원인을 알 수 있을 듯 합니다.

 

https://drive.google.com/drive/folders/1ZLHRKaXx8Ou8kZNd1WE6qALxq_wJODXW

 

에 프로젝트를 올려주시면 저녁에 테스트를 해 볼 수 있습니다.

 

코드 올리신 후에 댓글 남겨주세요

lulook1562님의 프로필 이미지
lulook1562
Questioner

회사에서 짬짬히 강의를 듣는데 외부로 보내기가 안되네요..

react쪽에서 카카오 회원정보 가져오는 걸 시도해보니 잘되어서 api서버쪽도 조금 변경해 수업을 따라가고 있습니다.

신경써주셔서 감사합니다.

zk202308a5410님의 프로필 이미지
zk202308a5410
Instructor

아.. 회사 보안에서 막히시는군요..

그렇다면 보안쪽에서 막힐수도 있긴 합니다만..

 

나중에라도 필요하신 부분 공유가능하시면 올려주세요^^

0

안녕하세요, 조정대님. 인프런 AI 인턴입니다.

주어진 로그 메시지와 소스 코드를 기반으로 문제의 원인을 분석해 보겠습니다.

문제의 원인:

주된 문제는 다음과 같습니다:

  1. 자격 증명 경로 실패: 이 문제는 주로 HTTPS 요청을 처리하는 동안 발생합니다. 인증서 경로를 찾을 수 없다는 메시지는 SSL 인증서가 설치되지 않거나 잘못 설정되어 있음을 의미합니다. 이는 서버가 API 서버(kapi.kakao.com)에 연결할 때 올바르게 신뢰할 수 있는 경로를 설정하지 못했다는 의미입니다.

  2. HSTS Header 관련 메시지: “Not injecting HSTS header since it did not match request to [Is Secure]“라는 메시지는 보안 연결이 설정되지 않았거나, 요청이 HTTPS가 아니라는 힌트를 줍니다. 이 부분은 직접적인 오류 원인은 아니지만, 설정 검토가 필요합니다.

해결 방법:

  1. SSL 인증서 설치: 서버에 신뢰할 수 있는 인증서를 설치해야 합니다. 카카오 API를 호출하기 위해서는 인증서 경로를 시스템에 추가하여 Java가 이를 신뢰하도록 해야 합니다.

    • 일반적으로 시스템의 기본 KeyStore에 인증서를 추가할 수 있습니다. 다음 명령을 통해 인증서를 수동으로 설치할 수 있습니다:
      keytool -import -alias someAlias -keystore cacerts -file path/to/certificate.crt
    
    • 이 때, cacerts 파일은 Java 설치 경로의 lib/security 디렉토리에 있으며, 기본 비밀번호는 changeit입니다. 이 작업은 신중하게 진행되어야 하며, 반드시 인증서의 법적 유효성을 검증해야 합니다.
  2. HSTS 설정 확인: HSTS 설정은 보안 강화와 관련된 부분이므로, 현재 문제 해결에 직접적인 영향을 미치지 않지만, HTTPS로 서버를 설정하여 보안을 강화할 수 있습니다.

  3. 테스트 환경 구성: 로컬에서 SSL 설정된 서버를 테스트하는 도중 발생하는 문제일 수 있으므로, 인증서 관련 설정을 시험할 때는 로컬 환경에서 모든 설정이 올바르게 되어 있는지 확인해 보세요.

참고 자료:

추가적으로 비슷한 문제를 겪으신 분들의 답변을 통해 더 많은 정보를 얻으실 수 있습니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해 드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

lulook1562's profile image
lulook1562

asked

Ask a question