Problem
웹 기반의 공통 모듈이 구현된 환경에서 공통 모듈이 실제 서비스하는 도메인과 다른 경우 다른 도메인간의 호출, 이동을 하여 동작하고 있었다. 그리고 공통 모듈 호출 후 사용자 사이트로의 이동 시 쿠키 정보가 보존되지 않아 인증이 유지되지 않는 문제가 있었다. A -> B -> A
의 형태였고 B -> A
로의 이동 시 문제가 발생했었다.
Solution
원인은 브라우저 업데이트에 따른 쿠키 SameSite
속성의 기본 값의 변경이 문제였다. SameSite
는 웹 애플리케이션에서 CSRF
(교차 사이트 요청 위조, 다른 사이트에서 사용자의 의지와 상관없이 사이트를 수정하는 ) 공격을 방지하기 위해 HTTP
쿠키에서 설정할 수 있는 속성1인데 2020년 2월 4일 릴리즈된 Chrome 80
부터 SameSite
속성 을 지정하지 않는 쿠키 는 SameSite=Lax
로 변경되었다. 따라서 별도 설정되지 않은 쿠키의 경우 도메인간 post
전송은 쿠키 정보가 유지되지 않는다.
만약 교차 사이트 컨텍스트에서 전달되어야 한다면 SameSite=None
을 명시적으로 요청할 수 있다. 참고로 SameSite=None
인 쿠키도 보안으로 표시되고 HTTPS
를 통해 전달되어야 한다2. 다음은 Samesite
의 설정 가능한 속성 목록 및 설명이다.
- Lax: 동일한 사이트 내의 요청 및 다른 사이트의
GET
요청으로 전송됩니다. 도메인 간GET
요청으로는 전송되지 않음. - Strict: 값은 쿠키가 동일한 사이트 내의 요청으로만 전송
- None
추가 정보로 2021년 1월 19일 릴리즈된 Chrome 88
까지는 정책 설정을 사용하여 기존 쿠키 동작으로 되돌릴 수 있었다. LegacySameSiteCookieBehaviorEnabledForDomainList
를 사용하여 신뢰할 수 있는 도메인을 지정하거나 LegacySameSiteCookieBehaviorEnabled
를 사용하여 전역 기본 값을 제어할 수 있었다. 하지만 현재 업데이트 된 최신 버전 91
버전은 (2021년 5월 25일 릴리즈) 별도 설정이 불가능 하다.
네이버 메인 쿠키 예시
특이사항
SameSite
를None
으로 설정하기 위해서는Secure
(SSL) 옵션을 반드시 사용해야한다.- iOS의 Chrome은 기본 WebKit 엔진을 사용하며 현재 새 기본값을 적용하지 않습니다.
- 현재 사용하는 브라우저가 Samesite 기본값을 적용하고 있는지는 여기에서 확인 가능하다.
Safari
,Firefox
모두 동일한 정책을 적용할 가능성이 높음SameSite
examples에서 예제를 확인할 수 있다.