JWT ํน์ง๊ณผ ์ฃผ์ ์ฌํญ
ํน์ง
JWT(Json Web Token) ์ ํต์ ์ ๋ณด๋ฅผ JSON ํ์์ ์ฌ์ฉํ์ฌ ์์ ํ๊ฒ ์ ์กํ๊ธฐ ์ํด ์ฌ์ฉ๋ฉ๋๋ค. JWT๋ ํ ํฐ ์์ฒด์ ์ ๋ณด๊ฐ ํฌํจ๋์ด ์๋ ํด๋ ์ ๊ธฐ๋ฐ ํ ํฐ์
๋๋ค. ์ผ๋ฐ์ ์ธ ์ ํ๋ฆฌ์ผ์ด์
์์ JWT๋ ์ฃผ๋ก ์ธ์ฆ๊ณผ ์ธ๊ฐ๋ฅผ ๊ตฌํํ๊ธฐ ์ํด ์ฌ์ฉ๋ฉ๋๋ค. JWT๋ ํค๋, ํ์ด๋ก๋, ์๊ทธ๋์ฒ๋ก ๊ตฌ๋ถ๋ฉ๋๋ค. ํค๋์๋ ํ ํฐ์ ์ํธํ ์๊ณ ๋ฆฌ์ฆ์ด๋ ํ์
์ ๊ฐ์ง๋ฉฐ, ํ์ด๋ก๋์๋ ๋ฐ์ดํฐ(๋ง๋ฃ์ผ, ์ฌ์ฉ์ ์ ๋ณด ๋ฑ)์ ๊ฐ์ง๋๋ค. ์๊ทธ๋์ฒ๋ ํค๋์ ํ์ด๋ก๋๊ฐ ๋ณ์กฐ๋์ง ์์๋์ง ํ๋จํ๊ธฐ ์ํด ์ฌ์ฉ๋๋๋ฐ์. ํค๋์ ํ์ด๋ก๋๋ฅผ ๋น๋ฐ ํค๋ฅผ ์ฌ์ฉํ์ฌ ํค๋์ ๋ช
์๋ ์ํธํ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์ํธํํ์ฌ ์๊ทธ๋์ฒ๊ฐ ๋ง๋ค์ด์ง๋๋ค.
JWT๋ฅผ ์ฌ์ฉํ์ฌ ์ธ๊ฐ๋ฅผ ๊ตฌํํ๋ ๊ฒฝ์ฐ, ํด๋ ์ ๊ธฐ๋ฐ ํ ํฐ์ ํน์ฑ ๋๋ถ์ ์ธ์
๊ธฐ๋ฐ ์ธ์ฆ์ ๋นํด์ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ์กฐํํ๊ธฐ ์ํ ์ถ๊ฐ์ ์ธ ์์
์ด ํ์ํ์ง ์์ต๋๋ค. ๋ํ, ์๋ฒ๊ฐ ์ํ๋ฅผ ๊ด๋ฆฌํ์ง ์๊ธฐ ๋๋ฌธ์ ์๋ฒ๊ฐ ์ด์คํ๋ ํ๊ฒฝ์์๋ ์ฌ์ฉ์์ ๋ก๊ทธ์ธ ์ ๋ณด๋ฅผ ์ผ๊ด์ฑ ์๊ฒ ๊ด๋ฆฌํ ์ ์์ต๋๋ค. (์ธ์
๋ถ์ผ์น ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์์ต๋๋ค.)
์ฃผ์ ์ฌํญ
โข
JWT๋ ๋์ฝ๋ฉ์ด ์ฝ์ต๋๋ค. Base64๋ก ๋์ฝ๋ฉํ๋ฉด ํ์ด๋ก๋๋ฅผ ํ์ธํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์, ๋ฏผ๊ฐํ ์ ๋ณด๋ฅผ ๋ด๋ ๊ฒ์ ์ ์ํด์ผ ํฉ๋๋ค.
โข
์ํฌ๋ฆฟ ํค์ ๋ณต์ก๋๊ฐ ๋ฎ์ ๊ฒฝ์ฐ, ๋ฌด์์ ๋์
๊ณต๊ฒฉ(Brute force Attack)์ ๋
ธ์ถ๋ ์ ์์ต๋๋ค. ๋ฐ๋ผ์, ๊ฐ๋ ฅํ ์ํฌ๋ฆฟ ํค๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ถ์ฅ๋ฉ๋๋ค.
โข
์ํฌ๋ฆฟ ํค๋ ์ ์ถ๋๋ฉด ์๋๊ธฐ ๋๋ฌธ์ ์์ ํ ๊ณต๊ฐ์ ๊ด๋ฆฌํด์ผํฉ๋๋ค.
โข
JWT ํ์ทจ์ ์ ์ํด์ผ ํฉ๋๋ค. ์ด๋ฅผ ์ํด์ JWT ์ ์ฅ ๊ณต๊ฐ, ๋ฆฌํ๋ ์ ํ ํฐ ๋์
์ฌ๋ถ, Refresh Token Rotation, ํ์ทจ ๊ฐ์ง ๋ฐ ๋์์ ๋ํด์ ๊ณ ๋ฏผ์ด ํ์ํฉ๋๋ค.
โข
ํ ํฐ์ ์ฆ์ ๊ฐฑ์ ์ด ์ฌ์ฉ์ ๊ฒฝํ์ ์ ํดํ๋์ง ๊ณ ๋ คํด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ฌ์ฉ์๊ฐ ๊ฒ์๊ธ์ 3์๊ฐ ๋์ ์์ฑํ๊ณ ์ ์ถํ์ง๋ง JWT๊ฐ ๋ง๋ฃ๋์ด ์ฌ์ฉ์๊ฐ ์์ฑํ ๊ธ์ ์ฌ๋ผ์ง ์ ์์ต๋๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์ ์ฌ๋ผ์ด๋ฉ ์ธ์
๊ณผ ๊ฐ์ ์ ๋ต์ ๊ณ ๋ฏผํด ๋ณผ ์ ์์ต๋๋ค.
โข
JWT none ์๊ณ ๋ฆฌ์ฆ ๊ณต๊ฒฉ์ ์ ์ํด์ผ ํฉ๋๋ค. ๊ณต๊ฒฉ์๊ฐ ํ ํฐ์ ํค๋์ ๋ช
์๋ ์๊ณ ๋ฆฌ์ฆ์ none์ผ๋ก ๋ณ๊ฒฝํ์ฌ, ํ์ด๋ก๋๊ฐ ๋ณ์กฐ๋์ด๋ ์๊ทธ๋์ฒ ๊ฒ์ฆ์ ์ฐํํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์ none ์๊ณ ๋ฆฌ์ฆ ๊ณต๊ฒฉ์ ์๋ฐฉํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ฑฐ๋, none ์๊ณ ๋ฆฌ์ฆ๊ณผ ๊ฐ์ด ์ฝํ ์๊ณ ๋ฆฌ์ฆ์ ๋ํด์ ํํฐ๋งํ๋ ๋ฑ ์ฃผ์๊ฐ ํ์ํฉ๋๋ค.
JWT(Json Web Token)์ ์ฅ์ ๋ฐ ๋จ์
์ฅ์
1.
์ฒซ์งธ
JWT๋ Stateless ์ธ์ฆ ๋ฐฉ์์ ์ ๊ณตํฉ๋๋ค. ์๋ฒ๊ฐ ์ฌ์ฉ์์ ์ธ์ฆ ์ํ๋ฅผ ๋ณ๋๋ก ์ ์ฅํ ํ์๊ฐ ์์ด, ์๋ฒ์ ๋ฉ๋ชจ๋ฆฌ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋น์ฉ์ ์ค์ผ ์ ์์ต๋๋ค. ์ธ์ฆ ์ํ ๊ด๋ฆฌ์ ๋ํ ๋ถ๋ด์ด ์์ด์ง๋ ์๋ฒ์ ํ์ฅ์ฑ ์ธก๋ฉด์์๋ ์ ๋ฆฌํฉ๋๋ค.
2.
๋์งธ
JWT๋ ํ ํฐ์ ์์ฒด์ ์ผ๋ก ํ์ํ ์ ๋ณด๋ฅผ ํฌํจํ ์ ์์ต๋๋ค. ์ฌ์ฉ์ ID, ๊ถํ ์ ๋ณด ๋ฑ์ ํ ํฐ ์์ฒด์ ๋ด์ ์ ์์ด, ์ถ๊ฐ์ ์ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์กฐํ ์์ด๋ ํ์ํ ์ธ์ฆ ๊ด๋ จ ์ ๋ณด๋ฅผ ์ป์ ์ ์์ต๋๋ค.
3.
์
์งธ
JWT๋ ์๋ช
(Signature)์ ํฌํจํ๊ณ ์์ด ๋ฐ์ดํฐ์ ๋ฌด๊ฒฐ์ฑ์ ๋ณด์ฅํ ์ ์์ต๋๋ค. ์๋ฒ์์ ๋ฐ๊ธํ JWT๊ฐ ๋ณ๊ฒฝ๋์๋์ง ๊ฒ์ฆํ ์ ์์ผ๋ฏ๋ก, ํด๋ผ์ด์ธํธ๊ฐ ์์๋ก ๋ด์ฉ์ ์กฐ์ํ๋ ๊ฒ์ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
๋จ์
๋จผ์ , ๋ก๊ทธ์์์ ๊ฐ์ ํ ์ ์๋ค๋ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์ก์ธ์ค ํ ํฐ์ ์ํ๋ ์๋ฒ์์ ๋ณ๋๋ก ๊ด๋ฆฌํ์ง ์๊ธฐ ๋๋ฌธ์, ํ ๋ฒ ๋ฐ๊ธ๋ ํ ํฐ์ ๋ง๋ฃ๋ ๋๊น์ง ์ ํจํฉ๋๋ค. ๋ฐ๋ผ์ ์๋ฒ์์ ์์๋ก ํ ํฐ์ ๋ฌดํจํํ ์ ์์ผ๋ฉฐ, ๋ค์ค ๋ก๊ทธ์ธ ์ ํ๊ณผ ๊ฐ์ ๊ธฐ๋ฅ๋ ๊ตฌํํ๊ธฐ ์ด๋ ต์ต๋๋ค.
๋ํ, ํ์ด๋ก๋ ํฌ๊ธฐ๋ก ์ธํ ๋คํธ์ํฌ ๋ถํ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. JWT๋ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ํฌํจํ๋ฏ๋ก ์ผ๋ฐ์ ์ธ ์ธ์
ID๋ณด๋ค ์ฉ๋์ด ํฌ๋ฉฐ, ์ด์ ๋ฐ๋ผ ๋คํธ์ํฌ ๋น์ฉ์ด ์ฆ๊ฐํ ์ ์์ต๋๋ค.