Java

[String Boot] JWT 토큰 저장 HTTP-only Cookie

연신내고독한늑대 2024. 8. 9. 20:00

# HTTP Only Cookie란?

웹 브라우저가 서버와의 통신에서만 사용하도록 설정된 쿠키로, 클라이언트 측의 스크립트(Javascript 등)에서는 접근할 수 없는 쿠키를 말합니다.

HTTP Only 속성이 설정된 쿠키는 서버가 설정한 경우에만 브라우저가 자동으로 서버로 전송하며, 클라이언트 측의 코드에서 읽거나 수정할 수 없는 쿠키입니다.

 

 

# HTTP Only Cookie를 사용해야 하는 이유와 단점

사용이유

 

 

  • 보안 강화: XSS 공격으로부터 보호됩니다. JavaScript로 접근할 수 없기 때문에 민감한 정보가 안전하게 저장됩니다.
  • 자동 처리: 브라우저가 자동으로 쿠키를 서버로 전송하므로, 개발자가 신경 쓸 부분이 줄어듭니다.
  • 데이터 무결성: 클라이언트 측에서 쿠키를 수정할 수 없기 때문에 데이터의 무결성이 보장됩니다.

 

단점

 

  • 디버깅의 불편함: 개발자 도구에서 쿠키의 내용을 직접 확인하기 어렵습니다.
  • CORS 설정 필요: Cross-Origin Resource Sharing(CORS) 설정을 통해 서버 간 요청을 처리해야 할 수도 있습니다.

LocalStorage와 SessionStorage와의 비교 분석

특징 브라우저 Storage (LocalStorage/SessionStorage) HTTP Only Cookie
보안 XSS 공격에 취약 XSS 공격으로부터 보호
무결성 클라이언트 측에서 수정 가능 클라이언트 측에서 수정 불가
자동 전송 직접 설정 필요 브라우저가 자동으로 전송
디버깅 개발자 도구에서 쉽게 접근 가능 접근 어려움
사용성 JavaScript로 쉽게 접근 가능 서버 간 설정 필요 

 

 

# Http Only Cookie Java코드


@Component public class JwtUtil {
    private static final long EXPIRATION_TIME = 86400000; // 1 day
    public String generateToken(UserDetails userDetails) {
        // JWT 토큰 생성 로직 String token = "generated-jwt-token"; // 실제 토큰 생성 로직을 여기에 구현
        return token;
    }

    public void addTokenToCookie(String token, HttpServletResponse response) {
        Cookie cookie = new Cookie("jwt-token", token);
        cookie.setHttpOnly(true); // HTTP Only 속성 설정
        cookie.setSecure(false); // HTTPS 환경에서는 true로 설정해야 함
        cookie.setPath("/"); // 쿠키의 경로 설정, "/"로 설정하면 전체 애플리케이션에 적용됨
        cookie.setMaxAge((int) (EXPIRATION_TIME / 1000)); // 쿠키 만료 시간 설정 (초 단위)   
        response.addCookie(cookie); // 응답에 쿠키 추가
    }
}

 

 

# 확인

개발자도구 -> Application -> Cookie