-
Notifications
You must be signed in to change notification settings - Fork 3
스프링 시큐리티 JWT Redis를 적용한 로그인 기능 구현 개발지식편(1)
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가지 방식 중 해당하는 방식으로 서버에 요청을 보내기 때문에 개발자가 목적에 맞는 방식을 선택하고 그 조건에 맞게 구현해야 한다.
- Simple Request
-
GET, POST, HEAD 중 한 가지 메소드를 사용한다.
-
POST 방식일 경우에는 Content-Type이 아래 3가지 중 하나여야 한다.
- application/x-wwww-form-urlencoded
- multipart/form-data
- text/plain
이 경우 클라이언트-서버 간의 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