Cross Domain 간 쿠키 전송
서론
•
현재 인증 인가 시스템이 세션 방식으로 구성되어 있다.
•
세션은 서로 같은 도메인 혹은 서브도메인에서 호스팅되어야지만 공유가 가능하다.
•
prod 서버는 프론트엔드와 백엔드의 도메인이 서브 도메인 관계라 세션 공유에 문제가 없었다.
•
허나, dev 서버의 경우 백엔드만 사용하고 프론트엔드는 local에서 실행시키고 있어 세션 공유를 하지 못하는 문제가 있었다.
•
이로 인해 백엔드 실행 파일을 프론트엔드에 넘겨주어 프론트 측에서 백엔드를 직접 local에서 함께 실행 시켜 개발을 진행하고 있다는 큰 불편함이 존재했다. 용량이 큰 jar 파일을 매번 직접 넘겨줘야 했기에 병목이 불가피했다.
•
이 고질적인 문제를 해결하기 위해 인증 인가 시스템을 토큰 방식으로 전환할까도 고민했지만
•
일단 더 빠르게 적용할 수 있는 방법을 찾았다.
•
쿠키 설정을 통해 서로 다른 도메인 간에도 전송 가능하게 해주는 것이다.
본론
•
그렇다면, 프론트가 local에서 실행할 땐 어떻게 해야 다른 도메인의 쿠키를 받을 수 있을까?
◦
가장 간단한 방법으론 응답 header에 쿠키를 담아 보내는 방법이 있겠지만, 나는 설정을 통해 근본적인 문제를 해결하고자 했다.
◦
따라서 SameSite 설정을 none으로 바꿔주어 이를 해결했다.
server:
servlet:
session:
cookie:
same-site: none
secure: true
Java
복사
◦
다만, SameSite 설정을 none으로 하려면 secure 설정이 true여야 해서 https 배포를 함께 진행해줬다.
◦
cookie 속성에 대해선 아래 문서를 참고했다.
Lax
Cookies are not sent on normal cross-site subrequests (for example to load images or frames into a third party site), but are sent when a user is navigating to the origin site (i.e., when following a link).
This is the default cookie value if SameSite has not been explicitly specified in recent browser versions (see the "SameSite: Defaults to Lax" feature in the Browser Compatibility).
None
Cookies will be sent in all contexts, i.e. in responses to both first-party and cross-origin requests. If SameSite=None is set, the cookie Secure attribute must also be set (or the cookie will be blocked).
Secure
A Secure cookie is only sent to the server with an encrypted request over the HTTPS protocol. Note that insecure sites (http:) can't set cookies with the Secure directive.
참고
결론
•
프론트 local에서 테스트해본 결과 성공적으로 동작한다.