๐ ๋์ ์ธ์ ์ ์ด
๋์ ์ธ์ ์ ์ด๋ ํ์ฌ ๋์ผํ ๊ณ์ ์ผ๋ก ์ธ์ฆ์ ๋ฐ์ ๋ ์์ฑ๋๋ ์ธ์ ์ ํ์ฉ ๊ฐ์๊ฐ ์ด๊ณผ๋์์ ๊ฒฝ์ฐ์ ์ด๋ป๊ฒ ๊ทธ ์ธ์ ์ ๊ณ์์ ์ผ๋ก ์ด๊ณผํ์ง ์๊ณ ์ธ์ ์ ์ ์งํ๋์ง์ ๋ํ ์ ์ด๋ฅผ ๋งํ๋ค.
ํ์ฉ ๋ธ๋ผ์ฐ์ ๊ฐ์๊ฐ 1๊ฐ๋ผ๊ณ ๊ฐ์ ํ ๊ฒฝ์ฐ์ (์ฌ์ฉ์ 1, 2๋ ๋์ผํ ๊ณ์ )
1.์ด์ ์ฌ์ฉ์ ์ธ์ ๋ง๋ฃํ๋ ๋ฐฉ๋ฒ
2. ํ์ฌ ์ฌ์ฉ์ ์ธ์ฆ ์คํจ
๋์ ์ธ์ ์ ์ด API
- maximumSessions : ์ค์ ํ ์๋งํผ ์ต๋ ํ์ฉ ๊ฐ๋ฅ ์ธ์ ์๋ฅผ ์ค์
- maxSessionPreventsLogin : true๋ก ์ค์ ํ๋ฉด ๋์ ๋ก๊ทธ์ธ ์ฐจ๋จํจ -> ์์์ 2๋ฒ์งธ ๋ฐฉ๋ฒ, false๋ 1๋ฒ์งธ ๋ฐฉ๋ฒ
- invalidSessionUrl
- expireUrl
๐ ๋ฐ์ ๋ ๊ฐ ๋ค ์ค์ ํ๋ฉด invalidSessionUrl์ด ์ฐ์ ์์๊ฐ ๋๋ค.
1. ์ด์ ์ฌ์ฉ์ ์ธ์ ๋ง๋ฃ
SecurityConfig
http
.sessionManagement()
.maximumSessions(1)
.maxSessionsPreventsLogin(false);
maxSessionPreventsLogin(false)๋ก ํ๊ฒ ๋๋ฉด ๋ ๋ค ์ธ์ฆ์ ์ฑ๊ณต์ ํ๊ฒ ๋์ง๋ง, ์ฒซ ๋ฒ์งธ ๋ธ๋ผ์ฐ์ ๋ ์ธ์ ์ด ๋ง๋ฃ๋์ด์ ์ ์ํ๋ฉด ๋ง๋ฃ๋์๋ค๋ ๋ฌธ๊ตฌ๊ฐ ์ถ๋ ฅ๋๋ค.
2. ํ์ฌ ์ฌ์ฉ์ ์ธ์ฆ ์คํจ
SecurityConfig
http
.sessionManagement()
.maximumSessions(1)
.maxSessionsPreventsLogin(true);
๋ค๋ฅธ ๋ธ๋ผ์ฐ์ ๋ฅผ ์คํํด์ localhost:8080์ ์ ์ํ์ ๋ ํ๋๋ ๋ก๊ทธ์ธ์ด ๋์ง๋ง ๋ค๋ฅธ ํ ๋ธ๋ผ์ฐ์ ๋ ์ธ์ maximum์ด ์ด๊ณผ๋์๋ค๊ณ ๋ฌ๋ค.
์ธ์ ๊ณ ์ ๋ณดํธ
- ๊ณต๊ฒฉ์๊ฐ ์๋ฒ์ ์ ์์ ํ๋ฉด ์๋ฒ๋ ๊ณต๊ฒฉ์์๊ฒ JSESSIONID๋ฅผ ๋ฐ๊ธํ๋ค.
- ๊ณต๊ฒฉ์๋ ์ฌ์ฉ์์๊ฒ ์์ ์ด ๋ฐ์ ์ธ์ ์ฟ ํค๋ฅผ ์ฌ์ด๋๋๋ค.
- ์ฌ์ฉ์๋ ๊ณต๊ฒฉ์๊ฐ ์ฌ์ด๋์ ์ธ์ ์ฟ ํค๋ฅผ ์ด์ฉํด ์๋ฒ๋ก ์ ๊ทผํ๋ค.
- ๊ณต๊ฒฉ์์ ์ฌ์ฉ์ ๋ชจ๋๊ฐ ์ธ์ ์ ๊ณต์ ํ๊ธฐ ๋๋ฌธ์ ๊ณต๊ฒฉ์๊ฐ ํด๋น ์ธ์ ์ผ๋ก ์ ๊ทผํ ์ ์๋ค. -> ์ฌ์ฉ์ ์ ๋ณด ๊ณต์
๐ ํด๋น ๋ฐฉ์์ด ์ธ์ ๊ณ ์ ๊ณต๊ฒฉ์ด๋ค.
๊ทธ๋์ ์คํ๋ง ์ํ๋ฆฌํฐ๊ฐ ์ธ์ ๊ณ ์ ๋ณดํธ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
- ์ธ์ฆํ ๋๋ง๋ค ์๋ก์ด ์ธ์ ์ด ์์ฑ๋๋ค. -> ์๋ก์ด ์ฟ ํค๋ ์์ฑ
์ด๋ ๊ฒ ๋๋ฉด ๊ณต๊ฒฉ์๊ฐ ์ฌ์ด๋์ ์ธ์ ์ ๊ณต์ ํ ์ ์๋ค.
์๋ API๋ฅผ ํตํด์ ์ค์ ํ ์ ์๋ค.
http
.sessionManagement()
.sessionFixation().changeSessionId();
- changeSessionId : ๊ธฐ๋ณธ๊ฐ์ด๋ค. ์ฌ์ฉ์๊ฐ ์ธ์ฆ์ ์๋ํ๊ณ ์ฑ๊ณตํ๊ฒ ๋๋ฉด ์ฌ์ฉ์์ ์ธ์ ์ ๊ทธ๋๋ก ๋๊ณ ์ธ์ ์์ด๋๋ง ๋ณ๊ฒฝ์ด ๋๋ค. (์ธ์ ์์ด๋์ ๋ฐ๋ผ์ ์ธ์ ์ ์ฐพ์์ค๊ธฐ ๋๋ฌธ์ ๊ด์ฐฎ๋ค!)
- none : ์๋ฌด ์ค์ ๋ ์ํจ (๊ณต๊ฒฉ์๊ฐ ๊ณต๊ฒฉ์ ํ ์ ์๋ค.)
- migrationSession : ์๋ก์ด ์ธ์ ์ด ์์ฑ๋๊ณ ์๋ก์ด ์ธ์ ์์ด๋๋ก ์์ฑ๋๋ค
- newSession : ์ธ์ ์ด ์๋กญ๊ฒ ์์ฑ๋๊ณ ์ธ์ ์์ด๋๋ ์๋กญ๊ฒ ์์ฑ๋์ง๋ง ๊ทธ ์ธ์ ์์ ์ค์ ํ ์ฌ๋ฌ ๊ฐ์ง ์์ฑ์ ๊ฐ๋ค์ ์ฌ์ฉํ์ง ๋ชปํ๊ณ ์๋กญ๊ฒ ์์ฑ๊ฐ์ ์ค์ ํด์ผ ๋๋ค.
changeSessionId์ migrationSession์ ์์ฑ๊ฐ์ด ์ ์ง๋๋ค.
changeSessionId๋ ์๋ธ๋ฆฟ 3.1 ์ด์์์ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ฌ์ฉ๋๊ณ , migrationSession์ ๊ทธ ์ดํ์์ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ฌ์ฉ๋๋ค.
์ธ์ ์ ์ฑ
ํด๋น ๊ธ์ ์ธํ๋ฐ์ ์คํ๋ง์ํ๋ฆฌํฐ-Spring Boot ๊ธฐ๋ฐ์ผ๋ก ๊ฐ๋ฐํ๋ Spring Security๋ฅผ ๋ณด๊ณ ์์ฑํ ๊ธ์ ๋๋ค.