-
[GDSC/Front-End] JWT ๋ก๊ทธ์ธFront-end/GDSC 2022. 12. 6. 16:46
๐ JSON Web Token
- ์ธ์ฆ์ ํ์ํ ์ ๋ณด๋ค์ ์ํธํ์ํจ JSON ํ ํฐ
- ์นํ์ค์ผ๋ก์, ๋ ๊ฐ์ฒด์์ JSON ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ๋ณ๊ณ ์๊ฐ์์ฉ์ ์ธ(self-contained) ๋ฐฉ์์ผ๋ก ์ ๋ณด๋ฅผ ์์ ์ฑ ์๊ฒ ์ ๋ฌ
- JWT ๊ธฐ๋ฐ ์ธ์ฆ์ JWT ํ ํฐ(Access Token)์ HTTP ํค๋์ ์ค์ด ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ๋ฅผ ์๋ณํ๋ ๋ฐฉ์
๐ JWT ์ฌ์ฉ ์์
- ํด๋ผ์ด์ธํธ ์ฌ์ฉ์๊ฐ ์์ด๋, ํจ์ค์๋๋ฅผ ํตํด ์น์๋น์ค ์ธ์ฆ
- ์๋ฒ์์ ์๋ช ๋ JWT๋ฅผ ์์ฑํ์ฌ ํด๋ผ์ด์ธํธ์ ์๋ต์ผ๋ก ๋๋ ค์ค
- ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐ์ ์ผ๋ก ์๊ตฌํ ๋ JWT๋ฅผ HTTP Header์ ์ฒจ๋ถ
- ์๋ฒ์์ ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ์จ JWT๋ฅผ ๊ฒ์ฆ
๐ JWT ๊ตฌ์กฐ
WT๋ ‘.’์ ๊ตฌ๋ถ์๋ก 3๊ฐ์ง์ ๋ฌธ์์ด๋ก ๋์ด ์๋ค.
aaaaaa.bbbbbb.cccccc
ํค๋(header).๋ด์ฉ(payload).์๋ช (signature)(1) header
์ ์/๊ฐ๋
- JWT ์์ ์ฌ์ฉํ ํ์ ๊ณผ ํด์ ์๊ณ ๋ฆฌ์ฆ์ ์ข ๋ฅ
- JWT์์ ์ฌ์ฉํ ํ์ ๊ณผ ํด์ ์๊ณ ๋ฆฌ์ฆ์ ์ข ๋ฅ๊ฐ ๋ด๊ฒจ์๋ค.
์ฐ์
- ๋ ๋ฐ์ดํฐ๋ฅผ JSON์ผ๋ก ๋ง๋ค๊ณ , URL-safe BASE64 ์ธ์ฝ๋ฉํ๋ฉด ์์ฑ
typ
- ํ ํฐ์ ํ์ ์ ์ง์ ํ๋ค. ์ฆ, JWT์ด๋ค.
alg
- ํด์ฑ ์๊ณ ๋ฆฌ์ฆ์ ์ง์ ํ๋ค. ํด์ฑ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก๋ ๋ณดํต HMAC SHA256 ํน์ RSA๊ฐ ์ฌ์ฉ๋๋ฉฐ, ์ด ์๊ณ ๋ฆฌ์ฆ์ ํ ํฐ์ ๊ฒ์ฆํ ๋ ์ฌ์ฉ๋๋ signature ๋ถ๋ถ์์ ์ฌ์ฉ๋๋ค.
(2) payload
์ ์/๊ฐ๋
- ์๋ฒ์์ ์ฒจ๋ถํ ์ฌ์ฉ์ ๊ถํ ์ ๋ณด์ ๋ฐ์ดํฐ
- ์ฆ, ์๋ฒ์ ํด๋ผ์ด์ธํธ๊ฐ ์ฃผ๊ณ ๋ฐ๋ ์์คํ ์์ ์ค์ ๋ก ์ฌ์ฉ๋ ์ ๋ณด์ ๋ํ ๋ด์ฉ์ ๋ด๊ณ ์๋ ์น์
- payload ๋ถ๋ถ์๋ ํ ํฐ์ ๋ด์ ์ ๋ณด๊ฐ ๋ค์ด ์๋ค. ์ฌ๊ธฐ์ ๋ด๋ '์ ๋ณด์ ํ ์กฐ๊ฐ'์ ํด๋ ์(claim)์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
- name/value์ ํ ์์ผ๋ก ์ด๋ฃจ์ด์ ธ ์์ผ๋ฉฐ, ํ ํฐ์๋ ์ฌ๋ฌ ๊ฐ์ ํด๋ ์๋ค์ ๋ฃ์ ์ ์๋ค.
์ฐ์
- ์ ๋ฌํ ๋ฐ์ดํฐ๋ฅผ JSON์ผ๋ก ๋ง๋ค๊ณ , URL-safe BASE 64 ์ธ์ฝ๋ฉํ๋ฉด ์์ฑ
์ธ ๊ฐ์ง ํด๋ ์
- ํด๋ ์์ ๋ฑ๋ก๋(registered) ํด๋ ์, ๊ณต๊ฐ(public) ํด๋ ์, ๋น๊ณต๊ฐ(private) ํด๋ ์์ผ๋ก ๋๋์ด์ ธ ์๋ค.
(3) signature
์ ์/๊ฐ๋
- ์๋ช ์ ํค๋์ ์ธ์ฝ๋ฉ ๊ฐ๊ณผ, ์ ๋ณด์ ์ธ์ฝ๋ฉ ๊ฐ์ ํฉ์น ํ, ์ฃผ์ด์ง ๋น๋ฐํค๋ก ํด์ฌ๋ฅผ ํ์ฌ ์์ฑ
- Header, Payload ๋ฅผ Base64 URL-safe Encode ๋ฅผ ํ ์ดํ Header ์ ๋ช ์๋ ํด์ํจ์๋ฅผ ์ ์ฉํ๊ณ , ๊ฐ์ธํค(Private Key)๋ก ์๋ช ํ ์ ์์๋ช ์ด ๋ด๊ฒจ์๋ค.
ํน์ง
- ์๊ทธ๋์ฒ์์ ์ฌ์ฉํ๋ ์๊ณ ๋ฆฌ์ฆ์ ํค๋์์ ์ ์ํ ์๊ณ ๋ฆฌ์ฆ ๋ฐฉ์(alg)์ ํ์ฉํ๋ค.
- ์๊ทธ๋์ฒ์ ๊ตฌ์กฐ๋ (ํค๋ + ํ์ด๋ก๋)์ ์๋ฒ๊ฐ ๊ฐ๊ณ ์๋ ์ ์ผํ key ๊ฐ์ ํฉ์น ๊ฒ์ ํค๋์์ ์ ์ํ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์ํธํ๋ฅผ ํ๋ค.
์ฐ์
- header๊ณผ payload๋ฅผ URL-safe BASE64 ์ธ์ฝ๋ฉ ํ, ๋ง์นจํ(.)๋ก ์ด์ด์ค ๋ค, ์๋ฒ์์ ์ ํ ์ํธํ ์๊ณ ๋ฆฌ์ฆ์ ๋ฐ๋ผ, ์๋ฒ์์ ์์ฑํ ๋น๋ฐํค๋ฅผ ์ด์ฉํด ์ํธํํ ํ, URL-safe BASE64 ์ธ์ฝ๋ฉ์ ํ๋ฉด ์์ฑ
๐ OAuth
- OAuth๋ ์ธํฐ๋ท ์ฌ์ฉ์๋ค์ด ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๊ณตํ์ง ์๊ณ ๋ค๋ฅธ ์น์ฌ์ดํธ ์์ ์์ ๋ค์ ์ ๋ณด์ ๋ํด ์น์ฌ์ดํธ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๊ทผ ๊ถํ์ ๋ถ์ฌํ ์ ์๋ ๊ณตํต์ ์ธ ์๋จ์ผ๋ก์ ์ฌ์ฉ๋๋ ์ ๊ทผ ์์์ ์ํ ๊ฐ๋ฐฉํ ํ์ค ํ๋กํ ์ฝ
- ์ธ๋ถ ์๋น์ค์์๋ ์ธ์ฆ์ ๊ฐ๋ฅํ๊ฒ ํ๊ณ ๊ทธ ์๋น์ค์ API๋ฅผ ์ด์ฉํ๊ฒ ํด์ฃผ๋ ๊ฒ
๐ ๋์ ๋งค์ปค๋์ฆ
1 ~ 2. ๋ก๊ทธ์ธ ์์ฒญ
Resource Owner๊ฐ ์ฐ๋ฆฌ ์๋น์ค์ '๊ตฌ๊ธ๋ก ๋ก๊ทธ์ธํ๊ธฐ' ๋ฑ์ ๋ฒํผ์ ํด๋ฆญํด ๋ก๊ทธ์ธ์ ์์ฒญํ๋ค.
3 ~ 4. ๋ก๊ทธ์ธ ํ์ด์ง ์ ๊ณต, ID/PW ์ ๊ณต
5 ~ 6. Authorization Code ๋ฐ๊ธ, Redirect URI๋ก ๋ฆฌ๋๋ ํธ
Authorization Code๋ Client๊ฐ Access Token์ ํ๋ํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ์์ ์ฝ๋์ด๋ค. ์ด ์ฝ๋๋ ์๋ช ์ด ๋งค์ฐ ์งง๋ค. (์ผ๋ฐ์ ์ผ๋ก 1~10๋ถ)
7 ~ 8. Authorization Code์ Access Token ๊ตํ
9. ๋ก๊ทธ์ธ ์ฑ๊ณต
10 ~ 13. Access Token์ผ๋ก ๋ฆฌ์์ค ์ ๊ทผ
๐ React์์ ๊ตฌํ ๋ฐฉ๋ฒ
'Front-end > GDSC' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[GDSC/์ํ์ธ๋] ๊ฐ๋ฐ ์ผ์ง #1-2์ฃผ ์ฐจ (0) 2023.01.09 [GDSC/Front-End] React lazy loading (0) 2022.11.08