๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ”ฅ ํ”„๋กœ์ ํŠธ/์›จ๋”ฉ๋ฉ”์ดํŠธ

[์˜ค๋ฅ˜] ์ฟ ํ‚ค ํ•˜์œ„ ๋„๋ฉ”์ธ์ด ๋‹ฌ๋ผ ์ „๋‹ฌ๋˜์ง€ ์•Š๋Š” ์˜ค๋ฅ˜

by nitronium102 2023. 8. 13.

๋ฌธ์ œ ์ƒํ™ฉ

ํ•˜์œ„ ๋„๋ฉ”์ธ(api.weddingmate.co.kr)์—์„œ ์ƒ์œ„ ๋„๋ฉ”์ธ(weddingmate.co.kr)์œผ๋กœ ์ฟ ํ‚ค๋ฅผ ๋ณด๋‚ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ

ResponseCookie.from("refreshToken", refreshToken)
.path("/")
.domain("weddingmate.co.kr") 
.maxAge(TimeUnit.MILLISECONDS.toSeconds(refreshTokenValidationTime))
.secure(true)
.sameSite("None")
.httpOnly(true)
.build();

 

๋ฐœ์ƒ ์›์ธ

Redis์— ์ €์žฅ๋œ refreshToken ๊ฐ’(1)๊ณผ ์ฟ ํ‚ค์— ๋‹ด์•„์„œ ์ „๋‹ฌ๋˜๋Š” refreshToken ๊ฐ’(2)์ด ๋‹ค๋ฆ„
์ฟ ํ‚ค ์ „๋‹ฌ ๊ณผ์ •์—์„œ ๋ฌธ์ œ๊ฐ€ ์žˆ์„ ๊ฒƒ์œผ๋กœ ํŒŒ์•…

    public ResponseCookie generateRefreshTokenCookie(String email) {

        String refreshToken = tokenProvider.createRefreshToken(email);
        Long refreshTokenValidationTime = tokenProvider.getRefreshTokenValidationMs();

                // (1)
        redisService.setData("RefreshToken:" + email, refreshToken, refreshTokenValidationTime);

               // (2)
        return ResponseCookie.from("refreshToken", refreshToken)
            .path("/") // ํ•ด๋‹น ๊ฒฝ๋กœ ํ•˜์œ„์˜ ํŽ˜์ด์ง€์—์„œ๋งŒ ์ฟ ํ‚ค ์ ‘๊ทผ ํ—ˆ์šฉ. ๋ชจ๋“  ๊ฒฝ๋กœ์—์„œ ์ ‘๊ทผ ํ—ˆ์šฉํ•œ๋‹ค.
            .domain(".weddingmate.co.kr")
            .maxAge(TimeUnit.MILLISECONDS.toSeconds(refreshTokenValidationTime)) // ์ฟ ํ‚ค ๋งŒ๋ฃŒ ์‹œ๊ธฐ(์ดˆ). ์—†์œผ๋ฉด ๋ธŒ๋ผ์šฐ์ € ๋‹ซํž ๋•Œ ์ œ๊ฑฐ
            .secure(true) // HTTPS๋กœ ํ†ต์‹ ํ•  ๋•Œ๋งŒ ์ฟ ํ‚ค๊ฐ€ ์ „์†ก๋œ๋‹ค.
            .sameSite("None") // ํฌ๋กœ์Šค ์‚ฌ์ดํŠธ์—๋„ ์ฟ ํ‚ค ์ „์†ก ๊ฐ€๋Šฅ
            .httpOnly(true) // JS๋ฅผ ํ†ตํ•œ ์ฟ ํ‚ค ์ ‘๊ทผ์„ ๋ง‰์•„, XSS ๊ณต๊ฒฉ ๋“ฑ์„ ๋ฐฉ์–ดํ•˜๊ธฐ ์œ„ํ•œ ์˜ต์…˜์ด๋‹ค.
            .build();
    }

 

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

๋„๋ฉ”์ธ ์•ž์— .์„ ๋ถ™์—ฌ ๋ชจ๋“  ์„œ๋ธŒ๋„๋ฉ”์ธ ๊ฐ„์— ์ฟ ํ‚ค๊ฐ€ ๊ณต์œ ๋˜๋„๋ก ํ•จ

ResponseCookie.from("refreshToken", refreshToken)
.path("/")
.domain(".weddingmate.co.kr") //
.maxAge(TimeUnit.MILLISECONDS.toSeconds(refreshTokenValidationTime))
.secure(true)
.sameSite("None")
.httpOnly(true)
.build();

๋งŒ์•ฝ ์„œ๋ธŒ๋„๋ฉ”์ธ ๊ฐ„์— ์ฟ ํ‚ค ๊ณต์œ ๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค๋ฉด ๋„๋ฉ”์ธ์„ weddingmate.co.kr๋กœ ์„ค์ •ํ•˜์—ฌ ํ˜„์žฌ ๋„๋ฉ”์ธ์—๋งŒ ์ฟ ํ‚ค๋ฅผ ์‚ฌ์šฉ

๋Œ“๊ธ€