error

[error] jwt token 값 쿠키에서 가져올때, 쿠키 값이 null로 나올때 해결법

멋진놈 2024. 12. 30. 11:10
728x90

# 원인 : 

쿠키값이 null로 나오는 문제는 브라우저에서 document.cookie를 통해 쿠키를 읽을 수 없기 때문에 발생함.

이는 쿠키에 HttpOnly 옵션이 설정된 경우 발생.

HttpOnly 쿠키는 클라이언트 측에서 JavaScript로 접근할 수 없고, 서버 측에서만 접근 가능합니다.

# 해결 방법
1. 쿠키에 HttpOnly 옵션 제거
HttpOnly 옵션을 제거하면 쿠키를 클라이언트에서 JavaScript로 읽을 수 있지만, 이는 보안 취약성을 증가시킬 수 있으므로 실무에서는 권장되지 않음.

2. 서버 API를 통해 JWT 검증 및 사용자 정보 반환
쿠키를 직접 읽지 않고, 서버에 요청하여 JWT를 검증하고 사용자 정보를 반환받는 방법을 사용.

 

# jwt 토큰을 검증하고 사용자 정보를 반환하는 api

/**
 * JWT 토큰 유효성 검증
 * @param token JWT 토큰
 * @return 유효한 토큰인지 여부 (boolean)
 */
public boolean validateToken(String token) {
    try {
        Jwts.parserBuilder().setSigningKey(key).build().parseClaimsJws(token);
        return true;
    } catch (JwtException | IllegalArgumentException e) {
        log.warn("Invalid Token: {}", e.getMessage());
        return false;
    }
}

 

@GetMapping("/verify-token")
public ResponseEntity<String> verifyToken(@CookieValue("jwt") String jwtToken) {
    if (jwtTokenProvider.validateToken(jwtToken)) {
        String email = jwtTokenProvider.getAuthentication(jwtToken).getName();
        return ResponseEntity.ok(email);
    } else {
        return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body("Invalid token");
    }
}