kivv00ng
네오의 개발일지
kivv00ng
전체 방문자
오늘
어제
  • 분류 전체보기 (16)
    • java (6)
    • springboot (2)
    • db (1)
    • cs (1)
      • 네트워크 (1)
    • 끄적끄적 (3)
    • 기타 (1)
    • JPA (1)
    • IT도서 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
kivv00ng

네오의 개발일지

기타

cookie 미적용 문제(same-site)

2023. 3. 20. 19:12

refreshtoken을 쿠키에 저장하기로 결정했다.

구현 후 프론트와 연동을 진행하는데, 쿠키가 적용되지 않았다.

개발자 도구에서 응답 메시지를 보니 set-cookie는 잘 동작했다.

하지만 왜 브라우저에서는 저장이 되지 않는 걸까?

 

찾아보니 원인은 same-site 정책 때문이었다.

cookie에서도 cors처럼 Origin이 다를 경우에 각 브라우저마다 정해놓은 보안정책이 존재했다.

구글 크롬에서는 same-site 정책을 none으로 설정할 경우 secure가 true인 경우만 쿠키 저장이 가능했다.(https)

(확인해보니 사파리에서도 동일하다)

이제 개념적으로 좀 더 알아보자.

Third-party 쿠키와 First-party 쿠키

  • 서드 파티 쿠키: 사용자가 접속한 페이지와 다른 도메인으로 전송하는 쿠키
  • 퍼스트 파티 쿠키: 사용자가 접속한 페이지와 같은 도메인으로 전송되는 쿠키

ex) https://hyperlink-five.vercel.app/ 에서 요청시  https://api.hyper-link.store/ 에서 응답한다면 다른 도메인이고 서드파티 쿠키!

SameSite 쿠키

위의 개념을 바탕으로 서드파티 쿠키에 대한 보안 정책을 어떻게 할 것인지를 결정하는 것이 same-site 정책이고,

이는 크게 세가지로 분류된다.

  • Strict: 자사만 가능(같은 origin만 가능)
  • Lax: 간접적인 경우만 허용(form의 get 메소드 or a 태그의 herf 속성)
  • None: 다른 도메인 허용(same-site전략 검증X)

적용

나의 경우 https://hyperlink-five.vercel.app/ 에서 https://api.hyper-link.store/ 으로 요청하는 다른 도메인의 경우이다. 

따라서 same-site전략을 'None'으로 변경하고, same-site 정책을 준수하기 위해 secure을 true로 적용했다.

아래는 적용 후 코드 이다.

  private ResponseCookieBuilder createTokenCookieBuilder(final String value) {
    return ResponseCookie.from(REFRESH_TOKEN, value)
        .httpOnly(true)
        .secure(true)
        .path("/")
        .sameSite(SameSite.NONE.attributeValue());
  }

이후 잘 작동했다. ㅎㅎ

출처

  • https://seob.dev/posts/%EB%B8%8C%EB%9D%BC%EC%9A%B0%EC%A0%80-%EC%BF%A0%ED%82%A4%EC%99%80-SameSite-%EC%86%8D%EC%84%B1/
  • https://velog.io/@wiostz98kr/%EB%8B%A4%EB%A5%B8-%EB%8F%84%EB%A9%94%EC%9D%B8%EA%B0%84-%EC%BF%A0%ED%82%A4-%EC%A0%84%EC%86%A1%ED%95%98%EA%B8%B0
  • https://www.hahwul.com/2020/01/18/samesite-lax/
    kivv00ng
    kivv00ng

    티스토리툴바