JWT๋?
JWT = Json Web Token
ํ ํฐ ํ์ ์ค์ ํ๋์!
โ
json ๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ฒ ์ฃผ๊ณ ๋ฐ๊ธฐ ์ํ ํ ํฐ ํฌ๋งท
โ
๊ตฌ์ฑ(๋ด๊ณ ์๋ ์ ๋ณด)์
header + payload + signature
โ
โ
์ JWT ํ์์ ๋ง์ด ์ธ๊น?
- ์๋ฒ๊ฐ ์ํ ๊ธฐ์ตํ ํ์๊ฐ ์๊ณ
- ํ ํฐ ์์ ํ์ํ ์ ๋ณด ๋ด์ ์ ์๊ณ
- ๊ตฌ์กฐ ๋จ์ํ๊ณ , ๋ค์ํ ์ธ์ด/ํ๋ซํผ์์ ์ฌ์ฉ ๊ฐ๋ฅ
๋ฐ๊ธ๋ฐ์ JWT๋ฅผ ์จ์ ์ธ์ฆ ํ๋ ค๋ฉด,
HTTP ์์ฒญ ํค๋ ์ค Authorization ํค ๊ฐ์
Bearer + JWT ํ ํฐ๊ฐ ๋ฃ์ด์ ๋ณด๋ด์ผ๋จ.
โ
Authorization : Bearer ey~~~~
JWT ๊ตฌ์กฐ๋?
.์ ๊ธฐ์ค์ผ๋ก
ํค๋ (header), ๋ด์ฉ(payload), ์๋ช (signature)๋ก ๊ตฌ์ฑ
aaaaa.bbbbbb.ccccc // (a=ํค๋, b=๋ด์ฉ, c=์๋ช
)
1. ํค๋ (header)
๋จผ์ ํค๋์๋
ํ ํฐ์ ํ์ + ํด์ฑ ์๊ณ ๋ฆฌ์ฆ ์ง์ ํ๋ ์ ๋ณด๊ฐ ๋ด๊น
2. ๋ด์ฉ(payload)
๋ด์ฉ์๋
ํ ํฐ๊ณผ ๊ด๋ จ๋ ์ ๋ณด๊ฐ ๋ด๊น
๋ด์ฉ์ ํ ๋ฉ์ด๋ฆฌ = ํด๋ ์(claim)
โ
ํด๋ ์์ ํค-๊ฐ ํ์์ผ๋ก ๋์ด์์
โ
์ข ๋ฅ๋
- ๋ฑ๋ก๋ ํด๋ ์
- ๊ณต๊ฐ ํด๋ ์
- ๋น๊ณต๊ฐ ํด๋ ์
โ
โ
โ ๋ฑ๋ก๋ ํด๋ ์โ
ํ ํฐ์ ๋ํ ์ ๋ณด๋ฅผ ๋ด๋๋ฐ ์ฌ์ฉํจ
(๋ฐ๊ธ์, ์ ๋ชฉ, ๋์์, ๋ง๋ฃ์๊ฐ, ํ์ฑ ๋ ์ง, ๋ฐ๊ธ์๊ฐ, JWT ๊ณ ์ ์๋ณ์..)
โ
โ ๊ณต๊ฐ ํด๋ ์โ
๊ณต๊ฐ๋์ด๋ ์๊ด์๋ ํด๋ ์
์ถฉ๋ ๋ฐฉ์งํ ์ ์๋ ์ด๋ฆ ๊ฐ์ ธ์ผํจ (unique)
๋ณดํต ์ด๋ฆ URI๋ก ์ง์
โ
โ ๋น๊ณต๊ฐ ํด๋ ์โ
๊ณต๊ฐ๋๋ฉด ์๋๋ ํด๋ ์
ํด๋ผ์ด์ธํธ โฌ ๏ธโก๏ธ์๋ฒ ๊ฐ ํต์ ์ ์ฌ์ฉ๋จ
3. ์๋ช (signature)
ํด๋น ํ ํฐ์ด ์กฐ์๋์๊ฑฐ๋ ๋ณ๊ฒฝ๋์ง ์์์์ ํ์ธํ๋ ์ฉ๋
ํค๋์ ์ธ์ฝ๋ฉ๊ฐ, ๋ด์ฉ์ ์ธ์ฝ๋ฉ๊ฐ ํฉ์น ๋ค์์
์ฃผ์ด์ง ๋น๋ฐ์ปค ์จ์ ํด์๊ฐ ์์ฑํจ
ํ ํฐ์ ์ ํจ๊ธฐ๊ฐ
ํด๋ผ์ด์ธํธ - ์๋ฒ ํต์ ์ ์ธ์ฆ์ด ํ์ํ API๋ผ๋ฉด
ํ ํฐ์ ํตํด์ ์ธ์ฆ ํ๋ค๊ณ ํ์.
โ
๊ทผ๋ฐ ๋ง์ฝ์, ํ ํฐ ์ฃผ๊ณ ๋ฐ๋ ํ๊ฒฝ์ด ์ทจ์ฝํด์
ํ ํฐ ์์ฒด๊ฐ ๋ ธ์ถ๋๋ฉด?
โ
์๋ฒ๋ ํ ํฐ๊ณผ ํจ๊ป ์จ ์์ฒญ์ด,
ํ ํฐ ํ์ทจํ ๋์ ์ฌ๋์ด ๋ณด๋ธ ์์ฒญ์ธ์ง ์ ์๊ฐ ์์
โ
--> ๋ฆฌํ๋ ์ ํ ํฐ์ด ์๋ค๋ฉด?
โ
๋ฆฌํ๋ ์ ํ ํฐ
ํ ํฐ ์ ํจ๊ธฐ๊ฐ์ด ํ๋ฃจ๋ผ๊ณ ํด๋ณด์.
๊ทธ๋ผ ํ๋ฃจ์ข ์ผ ํด๋น ํ ํฐ์ผ๋ก ๋ญ๋ ํ ์ ์์. ์ํ!
--> ๊ทธ๋ผ ํ ํฐ ์ ํจ์๊ฐ์ด ์งง์ผ๋ฉด ๋๊ฒ ๋ค?
---> ๊ทธ๋ฌ๋ฉด ์ฌ์ฉ์ ์ ์ฅ์์ ๋ถํธํจ.
โ
----> ๋ฆฌํ๋ ์ ํ ํฐ์ด๋ผ๋๊ฒ ์์ผ๋ฉด ๋๊ฒ ๊ตฐ!
โ
โ
๋ฆฌํ๋ ์ ํ ํฐ์, ์ก์ธ์ค ํ ํฐ์ด๋์ ๋ณ๊ฐ์.
์ธ์ฆ์ ์ํ ์ฉ๋๊ฐ ์๋๋ผ, ์ก์ธ์ค ํ ํฐ์ด ๋ง๋ฃ๋์ ๋
new ์ก์ธ์ค ํ ํฐ ๋ฐ๊ธ ๋ฐ์์ผ ํ๋๋ฐ, ์ด๋ ์ฐ๋๊ฑฐ์.
โ
์์ธ์ค ํ ํฐ ์์ฒด์ ์ ํจ๊ธฐ๊ฐ์ ์งง๊ฒํ๊ณ
๋ฆฌํ๋ ์ ํ ํฐ ์ ํจ๊ธฐ๊ฐ ๊ธธ๊ฒํ๋ฉด
๊ณต๊ฒฉ์๊ฐ ์ก์ธ์ค ํ ํฐ ํ์ทจํด๋
๋ช๋ถ๋ค๋ฉด ๋ชป์ฐ๋๊น ์์ .
[๋ฆฌํ๋ ์ ํ ํฐ ๋ฐ๊ธ ๊ณผ์ ]
โ
1. ํด๋ผ์ด์ธํธ -> ์๋ฒ : ์ธ์ฆ ์์ฒญ
2. ์๋ฒ -> ํด๋ผ์ด์ธํธ : ์ก์ธ์ค ํ ํฐ & ๋ฆฌํ๋ ์ ํ ํฐ ์๋ต
3. ์๋ฒ -> DB : ๋ฆฌํ๋ ์ ํ ํฐ์ ์ ์ฅ
4. ํด๋ผ์ด์ธํธ -> ์๋ฒ :API ์์ฒญ
5. ์๋ฒ : ํ ํฐ ์ ํจ์ฑ ๊ฒ์ฌ ํ๊ณ ์๋ต
~~ ์๊ฐ์ด ํ๋ฅด๊ณ ~~
6. ํด๋ผ์ด์ธํธ -> ์๋ฒ : (๋ง๋ฃ๋ ํ ํฐ์ผ๋ก) API ์์ฒญ
7. ์๋ฒ -> ํด๋ผ์ด์ธํธ : ํ ํฐ ๋ง๋ฃ๋๋ค๊ณ ์๋ต
8. ํด๋ผ์ด์ธํธ -> ์๋ฒ : (๋ฆฌํ๋ ์ ํ ํฐ๊ณผ ํจ๊ผ) ์ก์ธ์ค ํ ํฐ ๋ฐ๊ธ ์์ฒญ
9. ์๋ฒ -> DB : ๋ฆฌํ๋ ์ ํ ํฐ ์กฐํ & ์ ํจ์ฑ ๊ฒ์ฌ
10. ์๋ฒ -> ํด๋ผ : ๋ง์กฑํ๋ฉด, new ์ก์ธ์ค ํ ํฐ์ผ๋ก ์๋ต
11. ํด๋ผ -> ์๋ฒ : new ์ก์ธ์ค ํ ํฐ์ผ๋ก ๋ค์ ์์ฒญ...(4๋ฒ๋ถํฐ ๋ฐ๋ณต)