상세 컨텐츠

본문 제목

CORS란?

백엔드 공부진행도/SpringBoot

by myeongjaechoi 2025. 1. 15. 13:25

본문

CORS(Cross-Origin Resource Sharing)

  • 출처가 다른 자원을 공유한다는 뜻
  • 한 출처에 있는 자원에서 다른 출처에 있는 자원에 접근하도록 하는 개념
  • 직역하면, 교차되는 출처 자원들의 공유라는 뜻
  • 다른 출처에 있는 자원을 요청한다고 하면, 이를 교차 출처 요청이라고 함
  • SOP(Same-Origin Plicy)를 우회하도록 허용하는 메커니즘
    • SOP : 같은 출처만 허용한다는 보안 정책

CORS의 역할

  • 보안 강화 : 요청을 허용할 도메인, HTTP 메서드. 헤더 등을 지정해 불필요한 접근을 차단
  • 다른 도메인 간 통신 허용 : 클라이언트와 서버가 다른 도메인에 있을 때 요청과 응답을 허용
    • Ex) 클라이언트에서 요청이 http://localhost:3000일 때, 서버가 http://localhost:8080이여도 응답을 허용
  • 정확한 설정 관리 : 필요한 리소스 공유를 허용하되, 불필요한 오픈을 방지

CORS 사용 예시

@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity httpSecurity) throws Exception {
    // CORS 및 CSRF 설정
    httpSecurity.cors().and().csrf().disable();

    // API 권한 설정
    configureApiAuthorization(httpSecurity);

    // OAuth2 로그인 설정 추가
    httpSecurity.oauth2Login(oauth2 -> oauth2
            .loginPage("/login") // 사용자 정의 로그인 페이지 (필요 시)
            .defaultSuccessUrl("/home", true) // 로그인 성공 후 리디렉션 URL
            .failureUrl("/login?error=true") // 로그인 실패 시 리디렉션 URL
            .successHandler(customAuthenticationSuccessHandler()) // 커스텀 성공 핸들러
            .failureHandler(customAuthenticationFailureHandler()) // 커스텀 실패 핸들러
    );

    return httpSecurity.build();
}

이건 나의 SecurityConfig.java 코드이다.

Rest API기반 애플리케이션으로, CSRF 보호는 비활성화하였다.

관련글 더보기