[Security] ์ฟ ํค vs ์ธ์ vs ํ ํฐ
by rlaehddnd0422JWT ์ธ์ฆ ๋ฐฉ์์ ๋ํด ์์๋ณด๊ธฐ์ ์์, ํด๋ผ์ด์ธํธ - ์๋ฒ๊ฐ์ ํต์ ์์ ์ธ์ฆ์ ๋ฐฉ์์ผ๋ก ์ฌ์ฉ๋๋ ์ฟ ํค, ์ธ์ , ํ ํฐ ๋ฐฉ์์ ๋ํด ๊ฐ๋จํ ์์๋ด ์๋ค.
โ๏ธ์ฟ ํค, ์ธ์ , ํ ํฐ์ ์ ์ฌ์ฉ๋ ๊น?
์ฟ ํค์ ์ธ์ ๊ทธ๋ฆฌ๊ณ ํ ํฐ์ ์ด๋์, ์ ์ฌ์ฉ๋ ๊น์?
์ด๋ฅผ ์ดํดํ๊ธฐ ์ํด์ ๋ณดํต ์น ํ๊ฒฝ์์ ์ฌ์ฉํ๋ HTTP ํ๋กํ ์ฝ์ ํน์ง์ ์๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
HTTP ํ๋กํ ์ฝ์ ํน์ง
1. ๋น์ฐ๊ฒฐ์ฑ(Connectionless) : ํด๋ผ์ด์ธํธ-์๋ฒ๊ฐ TCP ์ฐ๊ฒฐ์ ๋งบ์ ์ดํ ์๋ฒ๋ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋ํ ์๋ต์ ๋ณด๋ด๊ณ ๋ ํ, ๊ทธ ์ฆ์ ์ฐ๊ฒฐ์ด ๋์ด์ง๋๋ค.
2. ๋ฌด๊ฒฐ์ฑ(Stateless) : ๋น์ฐ๊ฒฐ์ฑ์ ์ํด ์ฐ๊ฒฐ์ด ๋์ด์ง๋ ์๊ฐ ๋ชจ๋ ์ํ์ ๋ณด๊ฐ ์ฌ๋ผ์ง๊ฒ ๋ฉ๋๋ค.
๋น์ฐ๊ฒฐ์ฑ๊ณผ ๋ฌด๊ฒฐ์ฑ์ ํน์ฑ์ผ๋ก ์ธํด ์๋ฒ๋ ํด๋ผ์ด์ธํธ๊ฐ ์ฒซ ๋ฒ์งธ ํต์ ๋ ๋ณด๋ธ ์ ๋ณด๋ฅผ ๋ ๋ฒ์งธ ํต์ ๋ ์ ์ ์๊ฒ ๋ฉ๋๋ค.
์ด๋ฌํ HTTP์ ํน์ฑ ๋๋ฌธ์, ์ฟ ํค๋ ์ธ์ , ํ ํฐ ๋ฐฉ์์ด ์ฌ์ฉ๋ฉ๋๋ค.
โ๏ธCookie ์ธ์ฆ ๋ฐฉ์
Cookie๋ Key-Value์์ ๋ฐ์ดํฐ ํ์ผ์ ๋๋ค.
๋์๋ฐฉ์
1. ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ๋ก๊ทธ์ธ ์์ฒญ์ ํฉ๋๋ค.
2. ์๋ฒ๋ ํด๋ผ์ด์ธํธ์ ๋ก๊ทธ์ธ ์์ฒญ์ ๋ํด ID์ PW๋ฅผ ํ์ธํ๊ณ , Response Header์ set-cookie: user=chrisjune์ ์ถ๊ฐํ์ฌ ์๋ตํฉ๋๋ค.
3. ํด๋ผ์ด์ธํธ๋ ์ดํ ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ ๋ ์ ๋ฌ๋ฐ์ cookie: user=chrisjune ์ฟ ํค๋ฅผ ์๋์ผ๋ก ์์ฒญํค๋์ ์ถ๊ฐํ์ฌ ์์ฒญํฉ๋๋ค.
์ฟ ํค ํน์ง
- ๊ธฐํ์ด ์ ํด์ ธ ์์ง ์์ ์ง์ฐ์ง ์๋๋ค๋ฉด ๋ธ๋ผ์ฐ์ ์ ๋ฐ์๊ตฌ์ ์ผ๋ก ๋จ์์๊ฒ ๋ฉ๋๋ค.
- ์ฟ ํค๋ ํด๋ผ์ด์ธํธ์์ ์๋ฒ์ ์์ฒญ์ ๋ณด๋ผ ๋, ํด๋ผ์ด์ธํธ๊ฐ ์์๋ก ๊ฐ์ ๋ณ๊ฒฝํ ์ ์๊ธฐ ๋๋ฌธ์ ๋ณด์์ ์ข์ ๋ฐฉ๋ฒ์ ์๋๋๋ค.
- ์ฟ ํค๋ ํด๋ผ์ด์ธํธ์ ์ ์ฅ๋๋ฏ๋ก ์๋ฒ์ ์์์ ์ฌ์ฉํ์ง ์๋๋ค๋ ์ด์ ์ด ์์ต๋๋ค.
โ๏ธSession ์ธ์ฆ ๋ฐฉ์
์ธ์ ์ ์ผ์ ๊ธฐ๊ฐ๋์ ๋์ผํ ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ๋ค์ด์ค๋ ์์ฒญ์ ํ๋์ ์ํ๋ก ๋ณด๊ณ ๊ทธ ์ํ๋ฅผ ์ผ์ ํ๊ฒ ์ ์ง์ํค๋ ๊ธฐ์ ์ ๋๋ค.
์ฟ ํค์ ๋ฌ๋ฆฌ ์ธ์ ์ ์ค์ํ ์ ๋ณด๋ ๋ชจ๋ ์๋ฒ์ ์ ์ฅํ๊ณ , ํด๋ผ์ด์ธํธ์ ์ต์ด ๋ก๊ทธ์ธ ์์ฒญ์ ๋ํด ์ฟ ํค๋ก ์์์ ์๋ณ์๋ฅผ ์ ๋ฌํฉ๋๋ค.
๋์ ๋ฐฉ์
1. ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ๋ก๊ทธ์ธ ์์ฒญ์ ํฉ๋๋ค.
2. ์๋ฒ๋ ํด๋ผ์ด์ธํธ์ ๋ก๊ทธ์ธ ์์ฒญ์ ๋ํด ID์ PW๋ฅผ ํ์ธํ๊ณ , Response Header์ set-cookie: a1x2fjz์ ์ถ๊ฐํ์ฌ ์๋ตํฉ๋๋ค. ์ด ๋, ํด๋ผ์ด์ธํธ ์์ฒญ์ ์ค์ํ ์ ๋ณด์ธ user๋ ์๋ฒ์์ ๊ด๋ฆฌํฉ๋๋ค.
3. ํด๋ผ์ด์ธํธ๋ ์ด ํ ์๋ฒ๋ก๋ถํฐ ๋ฐ์ ์์์ ์๋ณ์ ์ฟ ํค๋ฅผ Request Header์ ๋ด์ ์์ฒญํ๊ณ , ์๋ฒ๋ Request Header์ ์์์ ์๋ณ์ ์ฟ ํค ๊ฐ์ ์๋ฒ์ ์ ์ฅ๋ ์ธ์ ์ ์ฅ์์์ ์ฐพ์๋ณด๊ณ ์ ํจํ์ง ํ์ธ ํ ์์ฒญ์ ์ฒ๋ฆฌํ๊ณ ์๋ตํฉ๋๋ค.
์ธ์ ํน์ง
- ์ธ์
์ ์ฟ ํค๋ฅผ ์ด์ฉํด ์ฟ ํค์ ์ธ์
ID๋ง ์ ์ฅํ๊ณ , ์๋ฒ์์ ์ธ์
์ ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ์ ์ธ๋ถ์ ์ผ๋ก ์ค์ํ ์ ๋ณด๊ฐ ๋
ธ์ถ๋์ง ์๋๋ค๋ ์ ์์ ๋น๊ต์ ๋ณด์์ฑ์ด ์ข์ต๋๋ค.
- ๊ทธ๋ฌ๋ ํด์ปค๊ฐ ์ธ์ ID ์์ฒด๋ฅผ ํ์ทจํ์ฌ ํด๋ผ์ด์ธํธ์ธ์ฒ ์์ฅํ ์ ์๋ค๋ ํ๊ณ๊ฐ ์กด์ฌํฉ๋๋ค. (์ด๋ ์๋ฒ์์ IP ํน์ ์ ํตํด ํด๊ฒฐ ๊ฐ๋ฅ)
- ์ธ์ ์ ๋ด์ฉ์ ์๋ฒ์ ์ ์ฅ๋๊ธฐ ๋๋ฌธ์ ํด๋ผ์ด์ธํธ๊ฐ ๋์ด๋ ๊ฒฝ์ฐ ์๋ฒ์ ๋ถํ๊ฐ ์ฌํด์ง ์ ์์ต๋๋ค.
- ์ธ์ ์ ๋ธ๋ผ์ฐ์ ๊ฐ ์ข ๋ฃ๋๋ฉด ๋ง๋ฃ์๊ฐ์ ์๊ด์์ด ์ญ์ ๋ฉ๋๋ค.
- ์ฟ ํค๋ ํ์ผ์์ ์ฝ๊ธฐ ๋๋ฌธ์ ์๋์ ์ผ๋ก ๋น ๋ฅด๊ณ , ์ธ์ ์ ์์ฒญ๋ง๋ค ์๋ฒ์์ ์ฒ๋ฆฌ๋ฅผ ํด์ผํ๊ธฐ ๋๋ฌธ์ ๋น๊ต์ ๋๋ฆฝ๋๋ค.
โ๏ธToken ์ธ์ฆ ๋ฐฉ์
ํ ํฐ ์ธ์ฆ ๋ฐฉ์์ ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์ ์ต์ด ์์ฒญ์ ์์์ 'ํ ํฐ'์ ๋ถ์ฌํ๋ ๋ฐฉ์์ ๋๋ค.
๋์ ๋ฐฉ์
1. ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ๋ก๊ทธ์ธ์ ์์ฒญํฉ๋๋ค.
2. ์๋ฒ๋ ํด๋ผ์ด์ธํธ์ ๋ก๊ทธ์ธ ์์ฒญ์ ๋ํด ID์ PW๋ฅผ ํ์ธํ๊ณ , ์ฌ์ฉ์์๊ฒ ์ ์ผํ ํ ํฐ์ ๋ฐ๊ธํฉ๋๋ค.
3. ํด๋ผ์ด์ธํธ๋ ์ดํ ์๋ฒ์ ์์ฒญ์ ํ ํฐ ์ ๋ณด์ ํจ๊ป ์์ฒญ์ ํ๊ณ ์๋ฒ๋ ํ ํฐ์ ์ ํจํ์ง ๊ฒ์ฆ ํ ์์ฒญ์ ์ฒ๋ฆฌํ๊ณ ์๋ตํฉ๋๋ค.
Token ํน์ง
์ฅ์
- ๊ธฐ์กด์ ์ธ์ ๊ธฐ๋ฐ ์ธ์ฆ์ ์๋ฒ๊ฐ ํ์ผ์ด๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ธ์ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์์ด์ผ ํ๊ณ ์ด๋ฅผ ์กฐํํ๋ ๊ณผ์ ์ด ํ์ํ๊ธฐ ๋๋ฌธ์ ๋ง์ ๋ถํ๊ฐ ๋ฐ์ํฉ๋๋ค.
- ํ์ง๋ง ํ ํฐ์ ์ธ์ ๊ณผ๋ ๋ฌ๋ฆฌ ์๋ฒ๊ฐ ์๋ ํด๋ผ์ด์ธํธ์ ์ ์ฅ๋๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ๋ ์คํ ๋ฆฌ์ง ๋ฑ์ ํตํด ์ธ์ ์ ๊ด๋ฆฌํ๋ ์๋ฒ์ ๋ถ๋ด์ ๋ ์ ์์ต๋๋ค.
- ์๋ฒ๋ ํ ํฐ์ด ๊ฒ์ฆ๊ธฐ๋ฅผ ํตํด ํ ํฐ์ด ์์กฐ๋์๋์ง ํ๋ณ๋ง ํ๋ฉด ๋ฉ๋๋ค.
๋จ์
- ์ฟ ํค/์ธ์ ๊ณผ ๋ค๋ฅด๊ฒ ํ ํฐ ์์ฒด์ ๋ฐ์ดํฐ ๊ธธ์ด๊ฐ ๊ธธ์ด, ์ธ์ฆ ์์ฒญ์ด ๋ง์์ง์๋ก ๋คํธ์ํฌ ๋ถํ๊ฐ ์ฌํด์ง์ ์์ต๋๋ค.
- ํด๋ผ์ด์ธํธ๊ฐ ํ ํฐ์ ํ์ทจ ๋นํ๋ฉด ์๋ฒ ์ ์ฅ์์ ๋์ฒํ๊ธฐ ์ด๋ ต์ต๋๋ค. (ํด๋ผ์ด์ธํธ ์๋ชป์ด๊ธด ํ์ง๋ง ์๋ฒ์์๋ ์ฌ์ฉ ๊ธฐ๊ฐ์ ์ ํํ๊ฑฐ๋, ํ ํฐ์ ๋ธ๋๋ฆฌ์คํธ๋ ๋ฐฉ์์ผ๋ก ํด๊ฒฐํ ์ ์์ต๋๋ค.)
<์ฐธ๊ณ ์๋ฃ>
'๐ Backend > Spring Security' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ธ๋ก๊ทธ์ ์ ๋ณด
Study Repository
rlaehddnd0422