[Spring] Cookie and CORS
Spring Bootspring boot version: 2.7.0
CORS 설정
@Configuration
class WebMvcConfig : WebMvcConfigurer {
override fun addCorsMappings(registry: CorsRegistry) {
registry.addMapping("/**")
.allowedOriginPatterns("http://localhost")
.allowedMethods("POST", "GET", "PUT", "OPTIONS", "DELETE", "HEAD")
.allowedHeaders("*")
.exposedHeaders("Set-Cookie")
.allowCredentials(true)
}
}
Cookie 객체 설정
data class Token(
val accessToken: String,
) {
fun cookie(): ResponseCookie {
return ResponseCookie.from("accessToken", accessToken)
.path("/")
.secure(true)
.sameSite("Strict")
.httpOnly(true)
.domain("localhost")
.maxAge(60 * 60 * 6) // 6 hours
.build()
}
}
- path
- httpOnly=true 인 경우 요청 URL에서 생성한 쿠키를 domain으로 지정한 URL에 적용
- root path("/")를 설정하지 않으면 요청 URL에서만 쿠키를 가짐 (httpOnly 가 true 경우만)
- httpOnly
- true: 서버에서 쿠키 관리(암호화된 쿠키). 서버만 쿠키를 읽고 사용 가능. 클라이언트에서 쿠키 알 수 없음
- path 설정 안하면 쿠키가 가진 도메인을 통해 해당 도메인에서만 쿠키 사용 가능
- false: 클라이언트에서 쿠키 관리(암호화되지 않은 쿠키)
- maxAge
- expires. 쿠키 유지 시간 설정
- sameSite
- 서로 다른 도메인 간의 쿠키 전송에 대한 보안 설정
- None: 동일 사이트와 크로스 사이트에 모두 쿠키 전송 가능
- CSRF(Cross-site request forgery) 및 의도하지 않은 정보 유출에 취약해질 가능성이 높다고 함
- Strict: 서로 다른 도메인 간에 쿠키 전송 불가
- Lax: Strict 설정에 일부 예외를 두어 쿠키 전송 가능
Cookie 설정
@RestController
class AdminAuthController {
@PostMapping("/sign-in")
fun signIn(@RequestBody request: AuthRequest): ResponseEntity<Any> {
/** ... */
// Cookie
val token = Token("asdfasd")
return ResponseEntity.ok()
.header(SET_COOKIE, token.cookie().toString())
.body(mapOf("result" to "SUCCESS"))
}
}
확인
개발자 도구 / Application / Cookies 에서 확인