카테고리 없음

카카오톡 로그인 문제 해결

suesoo 2025. 4. 4. 00:23

카카오톡 로그인 구현 시 계속 아래와 같은 오류가 떴다..!

콘솔에서는

위와 같이

구현해 둔 UserAuthenticationEntryPoint에 Spring Security에서 인증되지 않은 요청이 보호된 리소스에 접근했기 때문이라고 한다!

어떤 오류 일지 찾으면 여러 가지 해결방법을  써봤는데

 

1. cors 설정 변경

@Bean
    CorsConfigurationSource corsConfigurationSource() {
        CorsConfiguration configuration = new CorsConfiguration();
        configuration.setAllowedOriginPatterns(List.of("*"));

모든 Origin으로 변경해봤지만 -> 해결 X

 

 

2.JwtAuthenticationFilter 변경

 @Override
    protected void successfulAuthentication(HttpServletRequest request, HttpServletResponse response,
                                            FilterChain chain, Authentication authentication) throws IOException, ServletException {
       
        SecurityContextHolder.getContext().setAuthentication(authentication);

 인증 성공 후 SecurityContext에 저장하여 유지시켜 사용자 정보를 유지하게 끔 변경 -> 해결 X

 


3. SecurityConfig 클래스 변경

@Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http
            .authorizeHttpRequests(auth -> auth
                .requestMatchers("/public/**").permitAll()
                .anyRequest().authenticated()
            )

인증 없이 접근가능하게도 수정-> 해결 X

 

4. 포스트맨 확인

하지만 여전히 똑같은 에러가 떴고 포스트맨으로 확인을 해보기로 했다..!

 

위와 같이 바디 값에 카카오톡 로그인 관련 정보를 넣었더니

성공적으로 200 ok가 뜨면서 성공했다??!!

헤더의 Authorization 값에 bearer access token 값을 넣었더니 

위와 같이 성공적으로 사용자 정보를 조회할 수 있었다..!

하지만 여전히 웹페이지에는  에러가 뜨는데..

 

4. Token 반환 확인

에러를 뒤로하고 인증에 성공하면 Access Token, Refresh Token 토큰을 반환하는지 확인해 보기로 했다..!

@RestController
@RequiredArgsConstructor
public class AuthController {

    private final OauthService oAuthService;

    @PostMapping("/oauth")
    public ResponseEntity<Void> oauth(@RequestBody @Valid Oauth oAuth) {
        Token token = oAuthService.login(oAuth.getProvider(), oAuth.getCode());

        HttpHeaders headers = new HttpHeaders();
        headers.add("Authorization", "Bearer " + token.getAccessToken());
        headers.add("Refresh", "Bearer " + token.getRefreshToken());
        headers.add("userId", String.valueOf(token.getId()));

        return ResponseEntity.ok().headers(headers).build();
    }

}

 

500 에러가 뜨고 콘솔을 확인해 보니

이렇게 떠서 검색해 보니 

 

4. Kakao Developers 동의항목 설정 변경

kakaoAccount값이 null이 안되려면 카카오 디벨로퍼에서 동의항목에 account_email를 필수동의나 선택동의로 해야 한다!
그러기 위해서 동의항목에 개인정보 동의항목 심사 신청 ->에서 사업자는 사업자 등록번호를 넣고 개인은 개인정보를 넣고 목적에
account_email 필수동의를 선택해서 kakaoAccount값을 필수동의로 바꿀 수 있다.!

 

 

5. 포스트맨 Token 반환 최종 확인

위 사진처럼 바꾸고 다시 포스트맨을 통해 테스트해보면

성공적으로 토큰을 반환하며 카카오톡 로그인 구현이 되었다..!

웹페이지는 프런트엔드와 연결되어있지 않고 POST는 웹페이지에서 테스트 할 수 없어 뜨는 에러인 것 같다!
조만간 프론트엔드 코드를 간단하게라도 연결해서 다시 테스트해보는 것도 좋을 것 같다!