์น์ฌ์ดํธ์ ์๋ง์ ์ฌ์ฉ์๊ฐ ์ ์์ ํ๋๋ฐ ๊ทธ ์ค ํ์/๋นํ์ ์ฌ๋ถ์ ๋ฐ๋ผ ๋ก๊ทธ์ธ ์ธ์ฆ ๊ฒฐ๊ณผ์ ๋ฐ๋ผ ์ ๊ทผ ๊ถํ์ ๋ถ์ฌ๋ฅผ ํ ์ง ๊ฒฐ์ ํด์ ์๋ต์ ํด์ค์ผํ๋ค.
ํน์ ์ฌ์ดํธ์์ ์ด๋ค ํ๋์ด๋ ์ฌ์ฉ์์ ๋ก๊ทธ์ธ ์ฌ๋ถ๊ฐ ๋งค๋ฒ ํ์ธํด์ผ๋๋ค.
Q) ๋ธ๋ผ์ฐ์ ์ ์ฌ์ฉ์ ๋ก๊ทธ์ธ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ค๋ฉด?
A) DB์ ์ ์ฅ๋ ์ฌ์ฉ๋ ๊ณ์ ์ ํด์๊ฐ ๋ฑ์ ๊บผ๋ด์จ ์ ๋ณด๊ฐ ์ฌ์ฉ์์ ์ํธ๋ฅผ ๋ณต์กํ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ๊ณ์ฐํ ๊ฐ๊ณผ ์ผ์นํ๋์ง ํ์ธํ๋ ๊ณผ์ ์ด ํ์ํ์ฌ ์ฌ์ดํธ์์ ๋ชจ๋ ํ๋์ ๋ํด ์คํํ๊ธฐ ๊ต์ฅํ ๋ถ๋ด๋๋ ์์ ์ด๋ค.
์๊ฐ+์์ ์ํด/๋งค๋ฒ ์์ด๋,ํจ์ค์๋ ์ ๋ณด๊ฐ ์ด๋๋๋ฉด ๋ณด์์ ์ทจ์ฝ
์ด๋ฌํ ์ทจ์ฝ์ฑ์ ๋ณด์ํ๊ธฐ ์ํด ์ ํต์ ์ผ๋ก ์ฌ์ฉ๋ '์ธ์ '
์ธ์ ๋ฐฉ์์ ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธ์ ์ฑ๊ณตํ๋ฉด ์๋ฒ๋ '์ธ์ ํ๋ฑ์ง'๋ ๊ฑธ ์ถ๋ ฅํ๋ค.(a.k.a ์ ์ฅํ)
์ฌ์ฉ์ ๋ธ๋ผ์ฐ์ ์ธก์ ๋ฐ์ชฝ ์ฐข์ ์ธ์ ํ,
๋ค๋ฅธ ๋ฐ์ชฝ์ ์๊ธฐ ์ฑ ์(๋ฉ๋ชจ๋ฆฌ),์๋(ํ๋๋์คํฌ),๋ฐ์ดํฐ๋ฒ ์ด์ค(์ฐฝ๊ณ )์ ์ ํฉํ ๊ณณ์ ๋๋ค.
๋ธ๋ผ์ฐ์ ๊ฐ ์ด ํ๋ฅผ Session ID๋ ์ด๋ฆ์ ์ฟ ํค๋ก ์ ์ฅํ๊ณ 1
ํด๋น ์ฌ์ดํธ์ ์์ฒญ์ ๋ณด๋ผ๋๋ง๋ค ์ด ํ๋ฅผ ๊ฐ์ด ์ค์ด๋ณด๋ธ๋ค.
์ด ์ธ์ ์์ด๋๊ฐ ์ฌ์ฉ์๋ถํฐ ์ค๋ ค์ค๋ฉด ์๋ฒ๋ ๋๋จธ์ง ๋ฐ์ชฝ์ ์ธ์ ํ๋ฅผ ์ฐพ์ผ๋ฉด, authorazation(์ด์์์ ์ด์ ~)์ธ๊ฒ.
์ธ์ ์์ด๋๋ฅผ ์ฌ์ฉํด์ ์ด๋ค ์ฌ์ฉ์๊ฐ ์๋ฒ์ ๋ก๊ทธ์ธ ๋๊ฒ์ด ์ง์๋๋ ์ํ๋ฅผ '์ธ์ '์ด๋ผ๊ณ ํ๋ค.
์ฆ ์ฌ์ฉ์, ์๋ฒ์์ ๋๋ ์ธ์ ์ด ์ด๋์ ๋ ๊ฒ์ ๊ธฐ์ตํ๊ณ ์๋๊ฒ ์ธ์ .
์ด ๋ฐฉ์์๋ ํ์ ์ด ์๋ค.
ํ๋ฑ์ง ์๋ ๊ณง ์ฌ์ดํธ๋ฅผ ์ด์ฉํ๋ ์ฌ์ฉ์๋ค ์์ธ๋ฐ, ๋์๋ค๋ฐ๋ก ์ ์์๊ฐ ๋ง์์ง๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ ํ์์ด ์จ๋ค.
๊ทธ๋ฆฌ๊ณ ์๋ฒ์ ๋ฌธ์ ๊ฐ ์๊ฒจ์ ๊บผ์ ธ๋ฒ๋ฆฌ๋ฉด ํ๋ฐ์ฑ์ผ๋ก ์ฃ๋ค ๋ ๋ผ๊ฐ ์ฃผ์ฅ๋จ.
์๋ฌ๊ฐ ๋ฐ์ํด์ ์ฃ๋ค ์์ด๋ฒ๋ฆฌ๋ฉด = ์๋ฒ ์ฌ๋ถํ ํด์ผ๋ ์ํฉ์ด ์ค๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋ฆฌ์ ..
๊ทธ๋ ๊ฒ ๋๋ฉด ์ฌ์ฉ์๋ค์ ์ฃ๋ค ๋ก๊ทธ์ธ์ด ํ๊ฒจ์ ์ฌ์ ์ํด์ผ๋จ.
๋นํ๋ฐ์ฑ์ธ ํ๋์๋ค๊ฐ ์ธ์ ์ ๋๊ฒ๋๋ฉด? ๋ฉ๋ชจ๋ฆฌ์์ ๋ฐ๋ก๋ฐ๋ก ํธ์ถํ๋ ๊ฒ๋ณด๋ค ๋๋ ค์ ๋ฌธ์ ..
์๋น์ค๊ฐ ์ด๋์ ๋ ๊ท๋ชจ๊ฐ ์์ด์ ์๋ฒ๋ฅผ ์ฌ๋ฌ๋ ๋๊ณ ์ฌ์ดํธ๋ฅผ ์ด์ํ ๋๋ ์ฌ๋ฌ ์๋ฒ๊ฐ ๊ฐ๋์ค์ธ๋ฐ ํด๋ผ์ด์ธํธ ์์ฒญ์ด ๋ค์ด์ค๋ฉด ํด๋น ์์ฒญ์ผ๋ก ์ฌ๋ฌ ์๋ฒ๋ค ์ฌ์ด์ ๋ถ์ฐ์ ํด์ ๋ก๋๋ฐ๋์ฑ์ ํด์ฃผ๋๋ฐ,,
๋ง์ฝ ๋ก๊ทธ์ธ์ 1๋ฒ ์๋ฒ์ ์ฐ๊ฒฐ๋ผ์ ํ๊ณ , ์ด๋ฉ์ผ ํ์ด์ง๋ก ๊ฐ๋ ์์ฒญ์ 3๋ฒ ์๋ฒ๋ก ๋ถ์ฐ๋๋ฉด
1๋ฒ์ ์ธ์ ์ด ์๋๋ฐ 3๋ฒ์ ์์ผ๋ฉด ์ธ์ ์ ์ง๊ฐ ๋ ์๋๋ ๊ฒ.. ํ์ฅ
๊ทธ๋ ๋ค๊ณ ์์ฒญ์ด ๊ฐ์ ํ ๋น๋ ์๋ฒ๋ก๋ง ๋ณด๋ด์ง๋ ๊ฒ๋ ๋ฒ๊ฑฐ๋ก์ด ์ผ..
๋ค๋ฅธ ํด๊ฒฐ์ฑ ์ผ๋ก๋ ํ๋ฑ์ง(์ธ์ )์ ๊ณต์ฉ ์ฐฝ๊ณ (DB ์๋ฒ)์ ๋ฃ์ด๋๊ฑฐ๋ ๋ ์ด๋์ค, MenCached ๊ฐ์ ๋ฉ๋ชจ๋ฆฌํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ฒ(a.k.a. ๊ธธ๋ค๋ ๊ณต์ฉ ์ฑ ์)์ ๋ฐ๋ก ๋ฌ์ ์ธ์ ์ ๊ด๋ฆฌ.....๊ทผ๋ฐ ์ด๊ฒ๋ ์ฑ ์์ด ์์ด์ง๋ฉด ์ํฉ์ด ๋ฌ๋ผ์ง์ง ์์
๊ทธ๋์ ๊ฒฐ๋ก ์ ์๋ฒ ์ค๊ณ๋ ๋นก์น๋ค.(??????
์ด ๋ถ๋ด์ ์์ ๊ธฐ ์ํด 'ํ ํฐ ๋ฐฉ์'์ด ์ถํํ๋ค.
JSON WEB TOKEN . ์ค์ฌ์ JWT
ํ ํฐ ๋ฐฉ์์ JWT๋ฅผ ์ฌ์ฉํ๋ ์๋น์ค์์ ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธ์ ํ๋ฉด ํ ํฐ์ด๋ผ๋ ํ๋ฅผ ์ถ๋ ฅํด์ ๊ฑด๋ค์ค๋ค.
๋์ ์ด๋ฒ์ ์ธ์ ์ฒ๋ผ ์ฌ์ฉ์,์๋ฒ ๋ฐ๋ฐ ๋๋ ๊ฐ๋ ๊ฒ์ด ์๋ ๊ทธ๋ฅ ๋ชฝ๋ ์ค๋ค.
์ฌ์ฉ์๊ฐ ๋ฐ๋ ํ ํฐ์ ์๋์ ๊ฐ์ด ๋ง์นจํ๊ธฐ์ค์ผ๋ก 3๊ฐ์ ๋ฐ์ดํฐ(header, payload, verify signature)๋ก ์กฐํฉ๋์ด ์๋ค.
์์์ 2๋ฒ ํ์ด๋ก๋๋ก Base64๋ก ๋์ฝ๋ฉ ํ๋ฉด JSONํ์์ผ๋ก ์๋ ์์ ๋ฐ์ดํฐ๊ฐ ๊ตฌ์ฑ๋์ด์๋ค.
์ด ํ ํฐ์
a. ๋๊ฐ ๋๊ตฌ์๊ฒ ๋ฐ๊ธํ๋์ง
b. ํ ํฐ์ด ์ ํจ๊ธฐ๊ฐ
c. ํ ํฐ์ ํตํด ๊ณต๊ฐํ๊ธฐ ์ํ๋ ๋ด์ฉ ๋ฑ์
์๋น์ค ์ธก์์ ์ํ๋๋๋ก ๋ด์ ์ ์๋ค.
์ด๋ฌํ ํ ํฐ์ ๋ด๊ธด ์ฌ์ฉ์ ์ ๋ณด ๋ฑ์ ๋ฐ์ดํฐ๋ฅผ Claim์ด๋ผ๊ณ ํ๋ค.
์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธํ๊ณ ๋์ ๋ฐ์ ํ ํฐ์ ์ด ์ ๋ณด๋ค์ด ํด๋ ์์ด๋ผ๋ ๊ฒ์ผ๋ก ์ค๋ ค์จ๋ค.
์ดํ ์ฌ์ฉ์๋ก๋ถํฐ ์๋ฒํํ ๋ณด๋ด์ง๋ค.
์ฌ์ฉ์๊ฐ ๋ฐ์์ ๊ฐ๊ณ ์๋ ํ ํฐ ์์ฒด์ ์ด๋ฐ ์ ๋ณด๋ค์ด ๋ค์ด์์ผ๋ฉด ์๋ฒ ์์ฒญ๋ง๋ค ์ผ์ผ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฐพ๋ ์์ ์ด ์ค์ด๋ ๋ค.
Base64๋ก ์ธ์ฝ๋ฉ๋์ด ์๋ค๋ฉด ์ฌ์ฉ์๊ฐ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ๋ญ๋ ๋ค์ ๋์ฝ๋ฉ ์์ ์ผ๋ก ๋ณผ ์ ์๊ณ , ์ ์ฉ์ด ๋ ์ ์๋๊ฑด๋ฐ?
ํ ํฐ ์ ํจ๊ธฐ๊ฐ์ ํ 50๋ ๋๋ ค๋๋๋ค๋๊ฐ!
๊ด๋ฆฌ์ ์ฌ๋ถ ๊ฐ์๊ฒ ํ ํฐ์ ๋ด๊ฒจ ์์ผ๋ฉด ์ด๊ฑด true๋ก ๋ฐ๊ฟ ๊ถํ ์ธ๊ฐ๋ฅผ ๋ฐ์ผ๋ฉด?! ๋ฆฌ์ผ ์ง์ฅ
ํ์ง๋ง ํ ํฐ์ 1ํค๋, 3๋ฒ ์๋ช ๋ฐ์ดํฐ๋ก ์ธํด์ ๋ณด์ํ ์ ์๋ค.
1๋ฒ ํค๋๋ ๋์ฝ๋ฉํ๋ฉด ๋๊ฐ์ง ์ ๋ณด๊ฐ ๋ด๊ฒจ์๋ค.
a. ํ ํฐ ํ์ (=JWT)
b. alg(์๊ณ ๋ฆฌ์ฆ์ฝ์) ์๊ณ ๋ฆฌ์ฆ ํ์
1๋ฒ ํค๋, 2๋ฒ ํ์ด๋ก๋ ๊ทธ๋ฆฌ๊ณ '์๋ฒ์ ๊ฐ์ถฐ๋์ ๋น๋ฐ ๊ฐ'์ด ์ ์ ์ํธํ ์๊ณ ๋ฆฌ์ฆ์ ๋ฃ๊ณ ๋๋ฆฌ๋ฉด 3๋ฒ ์๋ช ๊ฐ์ด ๋์จ๋ค!
์๋ฒ๋ ์์ฒญ์ ํ ํฐ ๊ฐ์ด ์ค๋ ค๋ค์ด์ค๋ฉด 1๋ฒ,2๋ฒ์ ๊ฐ์ '์๋ฒ์ ๊ฐ์ถฐ๋์ ๋น๋ฐ ๊ฐ''์ ํจ๊ป ๋๋ ค๋ด์ ๊ณ์ฐ๋ ๊ฒฐ๊ณผ๊ฐ์ด 3๋ฒ ์๋ช ๊ฐ๊ณผ ์ผ์นํ๋ ๊ฒฐ๊ณผ๊ฐ ๋์ค๋์ง ํ์ธํ๋ค.
3๋ฒ ์๋ช ๊ฐ๊ณผ ๊ณ์ฐ ๊ฐ์ด ์ผ์นํ๊ณ ์ ํจ๊ธฐ๊ฐ๋ ์ง๋์ง ์์๋ค๋ฉด ์ฌ์ฉ์๋ ๋ก๊ทธ์ธ ๋ ํ์์ผ๋ก์ ์ธ๊ฐ๋ฅผ ๋ฐ์ ์ ์๋ค.
์๋ฒ๋ ์ฌ์ฉ์๋ค์ ์ํ๋ฅผ ์ด๋๊ฐ์ ๋ฐ๋ก ๊ธฐ์ตํด ๋ ํ์๊ฐ ์์ด ์ด ๋น๋ฐ ๊ฐ๋ง ์์ ์ฅ๊ณ ์๋ค๋ฉด, ์์ฒญ์ด ๋ค์ด์ฌ๋๋ง๋ค ์ค์บํ์ฌ ์ฌ์ฉ์๋ค์ ๊ฑธ๋ฌ๋ผ ์ ์๋ค!
์ด์ฒ๋ผ ์ํ๊ฐ์ ๊ฐ์ง ์๋๊ฑธ stateless, ์ธ์ ์ ๋ฐ๋๋ก stateful์ด๋ค.
๊ทธ๋ผ JWT๊ฐ ์งฑ ๋จน์ ๋์ง ์์๊น?
NOPE...
JWT๋ฅผ ์ธ์ ์ฒ๋ผ stateful์ด ๋๋ค๋ฉด ๊ธฐ์ตํ๋ ๋์์ ์ํ๋ฅผ ์ธ์ ๋ ์ ์ดํ ์ ์๋ค๋ ์๋ฏธ์ด๋ค..!
์๋ฅผ ๋ค๋ฉด ํ ๊ธฐ๊ธฐ์์ ๋ก๊ทธ์ธ ๊ฐ๋ฅํ ์๋น์ค๋ฅผ ๋ง๋ค๋ ค๋ ๊ฒฝ์ฐ PC์์ ๋ก๊ทธ์ธํ ์ํ์ ์ด๋ค ์ฌ์ฉ์๊ฐ ํธ๋ํฐ์์ ๋ ๋ก๊ทธ์ธํ๋ฉด PC์์๋ ๋ก๊ทธ์์๋๋๋ก ๊ธฐ์กด ์ธ์ ์ ์ข ๋ฃํ ์ ์๋ ๊ฒ..
์ธ์ ์ ์๋ฒ์์ ๋์ด๋ฒ๋ฆฌ๋ฉด ๋๋๋ฐ, JWT์์๋ ๋ถ๊ฐ๋ฅํ ์ผ์ด๋ค.
์ฌ์ฉ์์์ ์ด๋ฏธ ๊ฑด๋ธ ํ ํฐ์ ๋บ์ ์๋ ์๊ณ , ํ ํฐ ๋ฐ๊ธ ๋ด์ญ์ด๋ ์ ๋ณด๋ฅผ ์๋ฒ๊ฐ ๊ธฐ๋กํ๊ณ ์๋ ๊ฒ๋ ์๋๋ค..
์๋ฒ๊ฐ ์นํธํค๋ฅผ ์ฅ๊ณ ์๊ธฐ๋๋ฌธ์ ํต์ ๊ฐ ์ด๋ ต๋ค.. ํธํ๊ธดํ๋ฐ ์ฉ-_-;
๊ทธ๋์ ๋ณด์ ๋ฐฉ๋ฒ์ผ๋ก ํ ํฐ์ ๋๊ฐ ๋ฐ๊ธํ๋ค.
์๋ช ์ด ๋ช์๊ฐ~ ๋ช ๋ถ ์ดํ๋ก ์งง์ accessํ ํฐ๊ณผ ๊ฝค ๊ธธ๊ฒ, ๋ณดํต 2์ฃผ ์ ๋๋ก ์กํ ์๋ refresh ํ ํฐ์ด๋ค.
๋ ํ ํฐ์ ๋ฐ๊ธํ๊ณ ์ฌ์ฉ์์๊ฒ ๋ณด๋ด๊ณ ๋์ refresh ํ ํฐ์ ์์๊ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์๋ ์ ์ฅํ๋ค.
ํด๋ผ์ด์ธํธ๋ accessํ ํฐ์ ์๋ช ์ด ๋คํ๋ฉด refresh ํ ํฐ์ ๋ณด๋ธ๋ค.
์๋ฒ๋ ๊ทธ๊ฑธ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ๋ ๊ฐ๊ณผ ๋์กฐํด๋ณด๊ณ , ๋ง๋ค๋ฉด ์ accessํ ํฐ์ ๋ฐ๊ธํด์ค๋ค.
์ธ๊ฐ๋ฅผ ๋ฐ์ ๋ ์ฐ๋ ์๋ช ์ด ์งง์ ํ ํฐ์ด accessํ ํฐ,
์์ธ์ค ํ ํฐ์ ์ฌ๋ฐ๊ธ ๋ฐ์ ๋ ์ฐ๋ ๊ฒ์ด refresh ํ ํฐ์ด๋ค.
๊ทธ๋ ๊ฒ ๋๋ฉด ์์ธ์ค ํ ํฐ์ด ํ์ทจ ๋นํด๋ ์ ํจ๊ธฐ๊ฐ์ ๊ทธ๋ฆฌ ๊ธธ์ง ์๋ค.
๋๊ตฌ๋ฅผ ๊ฐ์ ๋ก๊ทธ์์ ์ํค๋ ค๋ฉด ๋ฆฌํ๋ ์ ํ ํฐ์ ๊ฐ๋ค๊ฐ DB์์ ์ง์๋ฒ๋ ค๊ฐ์ง๊ณ ํ ํฐ ๊ฐฑ์ ์ด ์ ๋๊ฒ ํ๋ฉด ๋๋ ๊ฒ~!
๊ทธ์น๋ง ํ ํฐ์ด ์ด์ ์๋ ๋์์๋ ์๊ฒ๋ ๋์ฒํ ์ ์๋๊ฒ ํฐ ์ฝ์ ์ด๊ธดํ๋ค.
ํ ํฐ ํ๋๋ก๋ง ์ฐ๋๊ฒ๋ณด๋จ ๋ซ๊ฒ ์ง๋ง ์ด๊ฒ๋ ์๋ฒฝํ ํด๊ฒฐ์ฑ
์ ์๋....๊ณ ๊ตฌ๋ฏธ
์ฐธ๊ณ ์๋ฃ ์์ฝ์ฝ๋ฉ https://www.yalco.kr/48_jwt/
- ๋ธ๋ผ์ฐ์ ์ ์ ์ฅ๋๋ ์ ๋ณด [๋ณธ๋ฌธ์ผ๋ก]
'Programming๐ฉ๐ปโ๐ป > Web Basic' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
2 JavaScript (0) | 2021.04.27 |
---|---|
JavaScript 1 (0) | 2021.04.26 |