Skip to content

스프링 시큐리티 JWT Redis를 적용한 로그인 기능 구현 개발지식편(1)

이은비 edited this page Oct 28, 2022 · 1 revision

스프링 시큐리티 + JWT + Redis를 적용한 로그인 기능 구현 - 개발지식편(1)

Spring Security CORS

HTTP 요청은 기본적으로 Cross-Site HTTP Request가 가능하다. 단순하게 다른 도메인의 리소스를 사용하는 것을 의미한다. 하지만, Cross-Site HTTP Request는 Same Origin Policy를 적용 받기 때문에 요청이 불가능하다. 쉽게 설명하면, 프로토콜, 호스트명, 포트가 같아야만 요청이 가능하다.

SPA ( Single Page Application )개발이 보편적으로 이루어지고 있어서 프론트엔드와 백엔드 사이에 도메인이 달라지는 경우가 있다. 이 경우, CORS 허용 정책이 필요하다.

CORS 요청에는 4가지 종류가 있다.

  • Simple
  • Preflight
  • Credential
  • Non-Credential

브라우저가 요청 내용을 분석하여 4가지 방식 중 해당하는 방식으로 서버에 요청을 보내기 때문에 개발자가 목적에 맞는 방식을 선택하고 그 조건에 맞게 구현해야 한다.

  1. Simple Request
  • GET, POST, HEAD 중 한 가지 메소드를 사용한다.

  • POST 방식일 경우에는 Content-Type이 아래 3가지 중 하나여야 한다.

    1. application/x-wwww-form-urlencoded
    2. multipart/form-data
    3. text/plain

이 경우 클라이언트-서버 간의 1회 요청-응답이 이루어지면 종료된다.

  1. Preflight Request

Simple Request 조건에 해당하지 않을 경우, 요청을 예비 요청과 본 요청으로 나누어서 전송한다. 브라우저는 예비 요청을 보내고 응답 받으면 본 요청을 보내고 응답 받는 식으로 2번의 처리가 이루어진다.

이에 대해 예비요청과 본요청에 대한 서버 단의 응답을 개발자가 직접 구분해서 처리하지 않는다. Access-Control 계열의 Response Header만 적절하게 정해주면 알아서 이루어진다.

코드를 통해 확인해보자.

SecurityConfig.class

  @Bean
  public CorsConfigurationSource corsConfigurationSource() {
    CorsConfiguration configuration = new CorsConfiguration();

    configuration.addExposedHeader("Authorization");  //브라우저에서 접근가능한 헤더
    configuration.addAllowedOriginPattern("*");
    configuration.addAllowedHeader("*");
    configuration.addAllowedMethod("*");
    configuration.setAllowCredentials(true); //Authorization 으로 사용자 인증처리 여부

    UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
    source.registerCorsConfiguration("/**", configuration);
    return source;
  }

위에 코드는 시큐리티 설정 클래스에 정의된 함수로, CORS를 위한 함수이다.

  • addAllowedOrigin() : 허용할 URL
  • addAllowedHeader() : 허용할 Header
  • addAllowedMethod() : 허용할 HTTP Method

https://toycoms.tistory.com/37