Https 로 설정까지 마쳤다면 HttpOnly 쿠키를 설정해보자
로그인 시 Refresh 토큰발급을 HttpOnly 쿠키로 발급하고자한다.
httpOnly란 Set-Cookie HTTP reponse 헤더에 포함되는 flag이다.
cookie를 생성할 때 HttpOnly를 사용하는 것은 브라우저가 HttpOnly를 지원할 경우 쿠키는 클라이언트 측 스크립트에 접근할 수 없다. 악성 스크립트(XSS 공격)에 의한 위험을 완화시켜준다.
즉, http only 쿠키 방식으로 저장된 정보는 Javscript의 Document.cookieAPI로 접근이 불가능하다. 따라서 XSS 취약점 공격으로 담긴 값을 불러올 수 없다. 또한 CSRF 공격도 막을 수 있다.
1. 쿠키생성
ResponseCookie.from("refreshToken", refreshToken)
.maxAge(Constants.AUTH_REFRESH_TOKEN_EXPIRE2) // 리프레시 토큰의 유효 기간 (7일)
.path("/")
.secure(true) // https 환경에서만 쿠키가 발동
.sameSite("None") // 동일 사이트과 크로스 사이트에 모두 쿠키 전송이 가능
.httpOnly(true) // 브라우저에서 쿠키에 접근할 수 없도록 제한
.build().toString();
httpOnly() 옵션이랑, secure() 옵션을 사용하는걸로 정의한다.
참고로 Https 환경에서만 전송 가능하므로 미리 SSL 을 통해 세팅해놓는다.
호출하면 아래와같이 set-cookies 에 httponly 와 secure 옵션이 보인다.
2. Token 갱신시 HttpOnly 쿠키 가져오기
@CookieValue("refreshToken") String refreshToken
@CookieValue 어노테이션을 통해 가져올 수 있다.
'web > SpringBoot' 카테고리의 다른 글
파일다운로드 시 PDF 워터마크 처리하기 (1) | 2023.10.17 |
---|---|
Properties 암호화하기 (0) | 2023.10.12 |
HTTPS(SSL) 적용 (0) | 2023.09.11 |
Maven VS Gradle (0) | 2023.09.07 |
ErrorContoller 오류처리 (0) | 2023.09.06 |