๐[Web] ๋ก๊ทธ์ธ ์ธ์ฆ๋ฐฉ์์ ๋ํด์โฆ
๋ก๊ทธ์ธ ์ธ์ฆ ๋ฐฉ์ - JWT ํ ํฐ
๋ก๊ทธ์ธ์ ๊ตฌํํ๋ ๋ฐฉ์์๋ 3๊ฐ์ง ๋ฐฉ์์ด ์๋ค.
- ๋ฐฉ์
- ์ธ์ 
- ์ฟ ํค
- jwt
1. JWT
JWT(Json Web Token)๋, Jsonํ์์ ์ด์ฉํด ์ฌ์ฉ์์ ๋ํ ์์ฑ(์ ๋ณด)์ ์ ์ฅํ๋ Claim ๊ธฐ๋ฐ์ Web Token์ด๋ค.
ํ ํฐ ์์ฒด๋ฅผ ์ ๋ณด๋ก ์ฌ์ฉํ๋ Self-Contained ๋ฐฉ์์ผ๋ก ์ ๋ณด๋ฅผ ์์ ํ๊ฒ ์ ๋ฌํ๋ค.
 
์ ํ๋ฆฌ์ผ์ด์
์ด ์คํ๋  ๋, JWT๋ฅผ static ๋ณ์์ ๋ก์ปฌ ์คํ ๋ฆฌ์ง์ ์ ์ฅํ๊ฒ ๋๋ค.
static ๋ณ์์ ์ ์ฅ๋๋ ์ด์ ๋ HTTP ํต์ ์ ํ  ๋๋ง๋ค JWT๋ฅผ HTTP ํค๋์ ๋ด์์ ๋ณด๋ด์ผ ํ๋๋ฐ, ์ด๋ฅผ ๋ก์ปฌ ์คํ ๋ฆฌ์ง์์ ๊ณ์ ๋ถ๋ฌ์ค๋ฉด ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ด๋ค.
ํด๋ผ์ด์ธํธ์์ JWT๋ฅผ ํฌํจํด ์์ฒญ์ ๋ณด๋ด๋ฉด ์๋ฒ๋ ํ๊ฐ๋ JWT์ธ์ง๋ฅผ ๊ฒ์ฌํ๋ค.
๋ํ ๋ก๊ทธ์์์ ํ  ๊ฒฝ์ฐ ๋ก์ปฌ ์คํ ๋ฆฌ์ง์ ์ ์ฅ๋ JWT ๋ฐ์ดํฐ๋ฅผ ์ ๊ฑฐํ๋ค.
(์ค์  ์๋น์ค์ ๊ฒฝ์ฐ์๋ ๋ก๊ทธ์์ ์, ์ฌ์ฉํ๋ ํ ํฐ์ blacklist๋ผ๋ DB ํ
์ด๋ธ์ ๋ฃ์ด ํด๋น ํ ํฐ์ ์ ๊ทผ์ ๋ง๋ ์์
์ ํด์ฃผ์ด์ผ ํ๋ค.)
2. JWT ๊ตฌ์กฐ
- JWT ๊ตฌ์กฐ
- Header
- Payload
- Signature
Json ํํ์ธ ๊ฐ ๋ถ๋ถ์ Base64Url๋ก ์ธ์ฝ๋ฉ ๋์ด ํํ๋๋ค.
๋, ๊ฐ๊ฐ์ ๋ถ๋ถ์ ์ด์ด์ฃผ๊ธฐ ์ํด .๊ตฌ๋ถ์๋ฅผ ์ฌ์ฉํจ.
๋ก๊ทธ์ธ/ํ์๊ฐ์ ๋์ ์๋ฆฌ
- ํ์๊ฐ์
- ํ์ ์ ๋ณด๋ฅผ ๋ฐ์์ด (id, pw, nickname)
- ํ์ ์ ๋ณด ์ค, ๋น๋ฐ๋ฒํธ๋ฅผ ํด์ํจ์๋ก ์ํธํํด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํจ - python ๋ด์ hashlib๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์กด์ฌํจ
- ๋ก๊ทธ์ธ
- ์ฌ์ฉ์์ id, pw๋ฅผ ๋ฐ์์ด
- ๋น๋ฐ๋ฒํธ๋ฅผ ๋๊ฐ์ด ํด์ฑ - ์ํธํ ํ ๊ฐ์ด ์ ์ฅ๋์ด์๊ธฐ ๋๋ฌธ
- id, ํด์ฑ๋ pw๋ก db๋ด์ ์ ์ ๋ฅผ ์ฐพ์
- ์ ์ ๋ฅผ ์ฐพ์ผ๋ฉด jwtํ ํฐ์ ๋ง๋ค์ด ๋ฐ๊ธ (jwtํ ํฐ ์์๋ id, ํ ํฐ ๋ง๋ฃ์๊ฐ ๋ฑ์ ์ ๋ณด ํฌํจ)
- jwtํ ํฐ์ ์ํธํํ ๋ค์์ ๋ธ๋ผ์ฐ์ ๋ก ๋ณด๋
- ๋ธ๋ผ์ฐ์ ์์ jwtํ ํฐ๊ฐ์ ์ฑ๊ณต์ ์ผ๋ก ๋ฐ์์ผ๋ฉด, ๋ธ๋ผ์ฐ์  ์ฟ ํค(Cookie)์ ์ด ํ ํฐ๊ฐ์ ์ ์ฅํจ
- ์ด ์ฟ ํค๊ฐ์ด ์ ์ง๋๋ ๋์, ํ์์ด ๋ธ๋ผ์ฐ์ ์ API๋ฅผ ์์ฒญํ ๋๋ง๋ค ํ์์์ ํ์ธ๋ฐ์ (์ฟ ํค ๊ฐ์ ํญ์ ๋ธ๋ผ์ฐ์ ์์ ์๋ฒ์ ๋ฌด์ธ๊ฐ ์์ฒญ์ ๋ณด๋ผ ๋ ๊ฐ์ด ๋ณด๋ด์ง๋ค. -> ์ผ์ข ์ ํ๋ฆฌํจ์ค๊ถ)
- ๋ก๊ทธ์์ ์, ํด๋น ํ ํฐ ์ญ์ 
 
      
๋๊ธ๋จ๊ธฐ๊ธฐ