브라우저별 Cross Browser Cookie 공유

브라우저 간 쿠키 공유를 위한 다양한 방법들을 살펴보고, 실제 인증 시스템 구축에 적용한 해결책을 소개합니다.

회사에서 인증 시스템을 구축하면서, Cross Browser 간의 쿠키를 공유해야 할 상황이 생겼다. A 라는 사이트에서 로그인을 하면, B 사이트에서도 로그인 세션이 유지되어야 한다.
 
이러한 일을 해결하기 위해서, 검토한 해결 방법은 크게 세 가지가 있다.
 
1. Redis 를 사용
가장 깔끔하고 확실한 방법. 하지만 과도한 기술 스펙이 도입되는 것은 아닌지가 우려되었다.
 
2. JSONP 를 사용
JSONP 를 사용하면, Cross-Browswer 간의 쿠키를 공유할 수 있다. jQuery, axios 등등에서 사용해 볼 수 있다.
하지만, 사파리 및 크롬 Private Mode 에서는 쿠키를 공유하여서 사용할 수 없다.
 
https://nakedsecurity.sophos.com/2020/03/26/apple-safari-now-blocks-all-third-party-cookies-by-default/
 
심지어, 다른 도메인 간의 쿠키 사용을 허용해 주는 SameSite=None 세팅이 있어도 사파리에서는 쿠키를 공유해서 사용할 수 없다.
 
3. Redirect 를 사용 
다른 도메인의 쿠키가 필요할 때마다, 해당 도메인으로 Redirect 하여 해당 도메인의 쿠키를 사용하게 한다.
 
4. Iframe 을 사용
해당 도메인에 보이지 않는 Iframe 을 생성하여, 컴포넌트끼리 쿠키 값을 메세지로 주고받게 한다.
하지만 이러한 방법 또한 (2) 의 경우와 같이, 사파리에서는 사용이 불가능하였다.
 
 
결과적으로, (2) 와 (3) 을 혼합한 형태로 인증 기능을 구현하였다. 
만약 JSONP 를 통해 다른 도메인의 쿠키를 사용할 수 있으면, JSONP 로 인증한다. 만약 그렇지 않다면, Redirect 를 사용하여 인증 절차를 진행한다.


이것도 읽어보세요