[Spring] CORS 란? CORS 해결
by 코박7CORS 란? CORS 해결
현재 MSA cloud 기반으로 개발중에 client server 에서 api 서버를 호출하는 경우 CORS 이슈로 제대로된 response 를 받지 못하는 이슈가 생겼다.
CORS 란 ?
우선 CORS 의 개념에 대해 살펴보자 CORS 란 Cross Origin Resource Sharing 이라고도 하며, 도메인 또는 웹 페이지가 다른 도메인 (도메인간 요청이 되겠다.)을 가진 리소스에 액세스 할 수 있게하는 보안 매커니즘이며, 동일 출저 정책떄문에 등장했다고 한다.
쉽게 풀어 설명하면 서로 다른 출처간에 리소스를 전달하는 방식을 제어하는 체제이다.
동일 출처 정책 ?
동일 출처 정책이란 다른 출처에서 가져온 리소스와 상호작용하는 것을 제한하는 중요한 보안 방식이라고 한다. (https://developer.mozilla.org/ko/docs/Web/Security/Same-origin_policy)
우선 동일한 출처란 프로토콜, 호스트명, 포트가 같다는걸 의미한다.
https://naver.com:8080 을 예를들어보자, https 는 프로토콜, naver.com 은 호트스명, 8080은 포트가 된다.
여기서 이제 의문이 드는점이 있다. 왜 동일한 출처만 접근하도록 허용해주는것일까 ?
예를들어 A 라는 보안회사에 로그인을 한 후 인증 토큰을 받았다고 생각해보자. 그런데 여기서 로그인한 상태에서 B 라는 악성코드회사에 접속하게 되면, B 회사 사이트에서 A 회사 api 로 ajax 요청을 보낼때 A 회사에 로그인해서 받은 토큰이 자동으로 첨부되어 사용자인척 할 수 있는 문제점이 생긴다.
이래서 동일 출처 정책이 생겼다고 한다.
해결하는법 ?
내가 맡고있는 프로젝트에서 가장 좋은 방법은 우선 Gateway 가 완성되어야 한다.
하지만 아직 Gateway 에 대한 지식도 부족하고 구현도 아직 안되었으니 차선책으로 가야하는 상황이었다.
여기서 하나 발견한 어노테이션이 CrossOrigin 어노테이션이다.
GetMapping("/example/{id}")
@CrossOrigin
public ResponseEntity<Long> read(@PathVariable Long id) {
...
}
위 예제와 같이 @CrossOrigin 어노테이션을 붙여주면 기본적으로 모든 도메인, 모든 요청방식 에 대해 허용한다라는 뜻이다.
Gateway가 구현되기전까지는 이렇게 사용하겠지만 모든 도메인, 모든 요청방식에 대해 허용한다는건 그만큼 보안에 취약해지는것같다. 이 부분에 대해선 더 알아봐야겠다.
이상.
'spring' 카테고리의 다른 글
[Spring] @NoArgsConstructor, @RequiredArgsConstructor, @AllArgsConstructor (0) | 2023.07.31 |
---|---|
[Spring] 간단하게 POST 요청 보내기 (2) | 2023.07.25 |
[Spring] Embedded kafka 테스트 진행 (0) | 2023.07.07 |
[Spring] File 을 MultipartFile 로 변경 (1) | 2023.07.07 |
[Spring] @Vaild 어노테이션을 리스트에 적용시켜보자 (0) | 2023.06.25 |
블로그의 정보
코딩박스
코박7