๐[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๋ฅผ ์์ฒญํ ๋๋ง๋ค ํ์์์ ํ์ธ๋ฐ์ (์ฟ ํค ๊ฐ์ ํญ์ ๋ธ๋ผ์ฐ์ ์์ ์๋ฒ์ ๋ฌด์ธ๊ฐ ์์ฒญ์ ๋ณด๋ผ ๋ ๊ฐ์ด ๋ณด๋ด์ง๋ค. -> ์ผ์ข ์ ํ๋ฆฌํจ์ค๊ถ)
- ๋ก๊ทธ์์ ์, ํด๋น ํ ํฐ ์ญ์
๋๊ธ๋จ๊ธฐ๊ธฐ