๊ฐœ๋ฐœ

[Web] ๋ธŒ๋ผ์šฐ์ € -> ์„œ๋ฒ„ ์š”์ฒญ์‹œ JSESSIONID ๊ณ„์† ๊ฐฑ์‹ ๋˜๋Š” ์˜ค๋ฅ˜ ์ˆ˜์ •

rkawk 2024. 6. 30. 21:58

์‚ฌ์šฉ ์Šคํƒ

front - vite+react

back - Spring

session control - redis

server - AWS EC2 

๋ฌธ์ œ

AWS EC2์— ํšŒ์›๊ด€๋ฆฌ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง„ Spring boot ๊ธฐ๋ฐ˜ Rest API๋ฅผ ์˜ฌ๋ฆฌ๊ณ , ํ”„๋ก ํŠธ์—์„œ ์š”์ฒญ์„ ๋ณด๋‚ผ ๊ฒฝ์šฐ ๊ณ„์†ํ•ด์„œ JSESSIONID ์ฟ ํ‚ค์˜ ๊ฐ’์ด ๊ณ„์† ๋ฐ”๋€Œ๋Š” ํ˜„์ƒ์ด ์ƒ๊ฒผ๋‹ค. ์„ธ์…˜์ด ๊ณ„์†ํ•ด์„œ ๊ฐฑ์‹ ๋˜๋ฉด์„œ ์„ธ์…˜ ๊ด€๋ฆฌ๋ฅผ ๋ ˆ๋””์Šค๋กœ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ ˆ๋””์Šค์— ๊ฐฑ์‹ ๋œ session id๋กœ ๊ณ„์†ํ•ด์„œ ๊ฐ’์ด ๋“ค์–ด๊ฐ€๊ฒŒ ๋˜์—ˆ๋‹ค. 

 

ํ”„๋ก ํŠธ, ๋ฐฑ์„ ์ „๋ถ€ ๋กœ์ปฌํ˜ธ์ŠคํŠธ์—์„œ ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์ด๋Ÿฌํ•œ ํ˜„์ƒ์ด ์ƒ๊ธฐ์ง€ ์•Š์•˜์ง€๋งŒ ๋‹ค๋ฅธ ์„œ๋ฒ„์— ํ”„๋ก ํŠธ์™€ ๋ฐฑ์„ ๋‘๊ฒŒ ๋˜๋ฉด ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๊ฒŒ ๋˜์—ˆ๋‹ค. 

 

์ด ๊ฐ’์ด ๊ณ„์† ๋ณ€ํ•ด์„œ ์ƒ๊ธฐ๋Š” ๋ฌธ์ œ์˜€๋‹ค.

ํ•ด๊ฒฐ

Cookie์˜ SameSite ๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ lax๋กœ ์„ค์ •๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•œ ์˜ค๋ฅ˜์˜€๋‹ค.

ํ˜„์žฌ์˜ ๋กœ๊ทธ์ธ ๋กœ์ง์„ ๋ณด๋ฉด

1. (front) ์นด์นด์˜ค ๋กœ๊ทธ์ธ ํ† ํฐ ๋ฐœํ–‰ -> ํ† ํฐ ๋ฐฑ์—”๋“œ๋กœ ์ „์†ก.

2. (back) ๋ฐ›์€ ํ† ํฐ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์„ธ์…˜ ์ƒ์„ฑ -> response header์˜ Set-Cookie๋กœ ๋ธŒ๋ผ์šฐ์ €์— JSESSIONID ์ฟ ํ‚ค ์ง€์ •.

3. (front) setcredential : true๋กœ ์„ค์ •๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์— backend์— JSESSIONID์— ํ•ด๋‹นํ•˜๋Š” ์ฟ ํ‚ค ์ „์†ก

4. (back) JSESSIONID์— ํ•ด๋‹นํ•˜๋Š” ์ฟ ํ‚ค๊ฐ’์„ ์–ป์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ถ”๊ฐ€์ ์ธ ์„ธ์…˜ ์ƒ์„ฑ X

 

ํ•˜์ง€๋งŒ samesite๊ฐ€ lax๋กœ ๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์— cross-site์—์„œ ์ฟ ํ‚ค ์ „์†ก์ด ๋ถˆ๊ฐ€๋Šฅํ–ˆ๋‹ค.

๊ทธ๋Ÿฌ๋ฏ€๋กœ front์—์„œ ๋‹ค์‹œ back์œผ๋กœ JSESSIONID์— ํ•ด๋‹นํ•˜๋Š” ์ฟ ํ‚ค๋ฅผ ์ „์†กํ•ด์•ผ๋˜๋Š”๋ฐ ์ „์†กํ•˜์ง€ ๋ชปํ•ด์„œ ์ƒ๊ฒผ๋˜ ๋ฌธ์ œ์˜€๋‹ค.

 

์ด ๋ถ€๋ถ„์„ ํ†ตํ•ด samesite ์˜ต์…˜์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

samesite๋ฅผ None์œผ๋กœ ์„ค์ •ํ•˜๋ ค๋ฉด Cookie์˜ secure์˜ต์…˜์„ true๋กœ ์ฃผ์–ด์•ผ ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ์ด ํ˜„์ƒ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š”

 

1. ๋„๋ฉ”์ธ ์„ค์ • 2. SSL ์ธ์ฆ์„œ ์„ค์ • 

 

๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‘๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ํ•„์š”ํ•˜๊ฒŒ ๋œ๋‹ค.