Refresh Token을 HTTP ONLY쿠키에 저장하기

2024. 7. 31. 20:42TIL

 오늘의 진행상황

 

@RestController
@RequestMapping("/refresh-token")
class RefreshTokenController(
    private val refreshTokenService: RefreshTokenService,
) {
    @PostMapping
    fun refreshAccessToken(
        @RequestBody request: RefreshTokenRequest,
        response: javax.servlet.http.HttpServletResponse
    ): ResponseEntity<TokenResponse> {
        val tokenResponse = refreshTokenService.refreshAccessToken(request)

        val refreshTokenHttpOnly = javax.servlet.http.Cookie("refreshToken", tokenResponse.refreshToken).apply {
            isHttpOnly = true 
            secure = true 
            path = "/"
            maxAge = 7 * 24 * 60 * 60 
        }
        response.addCookie(refreshTokenHttpOnly)
        return ResponseEntity.status(HttpStatus.OK).body(tokenResponse)
    }
}

RefreshToken과 AccessToken을 클라이언트에게 전달해주며,  RefreshToken의 경우에는 HttpOnly 쿠키에 저장하여 클라이언트 측에서는 JavaScript를 통해 토큰에 접근할 수 없기 때문에 XSS 공격자가 Refresh Token을 탈취하는 행위에서 보안이 강화된다.

javax.servlet.http.Cookie("refreshToken", tokenResponse.refreshToken).apply {
    isHttpOnly = true // 요것이 httponly설정 javascript로 허튼짓을 못하게함
    secure = true // HTTPS를 사용하는 경우 설정!!
    path = "/" //쿠키가 웹사이트의 모든 경로에서 사용되게함
    maxAge = 7 * 24 * 60 * 60 // 쿠키의 유효기간
}

'TIL' 카테고리의 다른 글

𝓒𝓢𝓡𝓕  (0) 2024.08.02
Տɑʍҽ ՏíԵҽ  (0) 2024.08.01
Refresh Token Redis로 저장하기  (0) 2024.07.30
𝓡𝓮𝓯𝓻𝓮𝓼𝓱 𝓣𝓸𝓴𝓮𝓷  (0) 2024.07.29
간단한 Debugging 사용법  (0) 2024.07.28