JWT ๊ธฐ๋ฐ ์ธ์ฆ
JWT ๊ธฐ๋ฐ ์ธ์ฆ์ด๋ ์ธ์ฆ์ ํ์ํ ์ ๋ณด๋ค์ ์ํธํ์ํจ ํ ํฐ์ ์๋ฏธํฉ๋๋ค. JWT ๊ธฐ๋ฐ ์ธ์ฆ์ ์ฟ ํค/์ธ์ ๋ฐฉ์๊ณผ ์ ์ฌํ๊ฒ JWTํ ํฐ(Access Token)์ HTTP ํค๋์ ์ค์ด ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ๋ฅผ ์๋ณํฉ๋๋ค.
JWT ๊ตฌ์กฐ
JWT๋ .์ ๊ตฌ๋ถ์๋ก ๋๋์ด์ง๋ ์ธ ๊ฐ์ง ๋ฌธ์์ด ์กฐํฉ์ ๋๋ค. ์ํธํ๋ ์ํ๋ก ์กด์ฌํฉ๋๋ค.
Header
Header๋ alg๊ณผ typ๋ ๊ฐ๊ฐ ์ ๋ณด๋ฅผ ์ํธํํ ํด์ฑ ์๊ณ ๋ฆฌ์ฆ ๋ฐ ํ ํฐ์ ํ์ ์ ์ง์ ํฉ๋๋ค.
Payload
Payload๋ ํ ํฐ์ ๋ด์ ์ ๋ณด๋ฅผ ์ง๋๊ณ ์์ต๋๋ค. ์ฃผ๋ก ํด๋ผ์ด์ธํธ์ ๊ณ ์ ID ๊ฐ ๋ฐ ํ์ํ ์ ๋ณด ๋ฑ์ด ํฌํจ๋๋ ์์ญ์ ๋๋ค. key-value ํ์์ผ๋ก ์ด๋ฃจ์ด์ง ํ ์์ ์ ๋ณด๋ฅผ Claim์ด๋ผ๊ณ ์นญํฉ๋๋ค.
Signature
Signature๋ ์ธ์ฝ๋ฉ๋ Header์ Payload์ ๋น๋ฐํค๊ฐ ๋ํด์ ธ ํด์ฑ๋์ด ์์ฑ๋ฉ๋๋ค. Header์ Payload๋ ๋จ์ํ ์ธ์ฝ๋ฉ๋ ๊ฐ์ด๊ธฐ ๋๋ฌธ์ ์ 3์๊ฐ ๋์ฝ๋ฉํ์ฌ ๋ด์ฉ ํ์ธ์ด ๊ฐ๋ฅํ์ง๋ง, Signature๋ ์๋ฒ ์ธก์์ ๊ด๋ฆฌํ๋ ๋น๋ฐํค๊ฐ ์ ์ถ๋์ง ์๋ ์ด์ ๋์ฝ๋ฉํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ Signature๋ ํ ํฐ์ ์๋ณ์กฐ ์ฌ๋ถ๋ฅผ ํ์ธํ๋๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
JWT ์ธ์ฆ๊ณผ์
- ํด๋ผ์ด์ธํธ ๋ก๊ทธ์ธ ์์ฒญ์ด ๋ค์ด์ค๋ฉด, ์๋ฒ๋ ๊ฒ์ฆ ํ ํด๋ผ์ด์ธํธ ๊ณ ์ ID ๋ฑ์ ์ ๋ณด๋ฅผ Payload์ ๋ด์ต๋๋ค.
- ์ํธํํ ๋น๋ฐํค๋ฅผ ์ฌ์ฉํด Access Token(JWT)์ ๋ฐ๊ธํฉ๋๋ค.
- ํด๋ผ์ด์ธํธ๋ ์ ๋ฌ๋ฐ์ ํ ํฐ์ ์ ์ฅํด๋๊ณ , ์๋ฒ์ ์์ฒญํ ๋ ๋ง๋ค ํ ํฐ์ ์์ฒญ ํค๋ Authorization์ ํฌํจ์์ผ ํจ๊ป ์ ๋ฌํฉ๋๋ค.
- ์๋ฒ๋ ํ ํฐ์ Signature๋ฅผ ๋น๋ฐํค๋ก ๋ณตํธํํ ๋ค์, ์๋ณ์กฐ ์ฌ๋ถ ๋ฐ ์ ํจ ๊ธฐ๊ฐ ๋ฑ์ ํ์ธํฉ๋๋ค.
- ์ ํจํ ํ ํฐ์ด๋ผ๋ฉด ์์ฒญ์ ์๋ตํฉ๋๋ค.
JWT ์ฅ์
- Header์ Payload๋ฅผ ๊ฐ์ง๊ณ Signature๋ฅผ ์์ฑํ๋ฏ๋ก ๋ฐ์ดํฐ ์๋ณ์กฐ๋ฅผ ๋ง์ ์ ์์ต๋๋ค.
- ์ธ์ฆ ์ ๋ณด์ ๋ํ ๋ณ๋์ ์ ์ฅ์๊ฐ ํ์์์ต๋๋ค.
- JWT๋ ํ ํฐ์ ๋ํ ๊ธฐ๋ณธ ์ ๋ณด์ ์ ๋ฌํ ์ ๋ณด ๋ฐ ํ ํฐ์ด ๊ฒ์ฆ๋ฌ์์ ์ฆ๋ช ํ๋ ์๋ช ๋ฑ ํ์ํ ๋ชจ๋ ์ ๋ณด๋ฅผ ์์ฒด์ ์ผ๋ก ์ง๋๊ณ ์์ต๋๋ค.
- ํด๋ผ์ด์ธํธ ์ธ์ฆ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ์ธ์ ๊ณผ ๋ค๋ฅด๊ฒ, ์๋ฒ๋ ๋ฌด์ํ๊ฐ ๋ฉ๋๋ค.
- ํ์ฅ์ฑ์ด ์ฐ์ํฉ๋๋ค.
- ํ ํฐ ๊ธฐ๋ฐ์ผ๋ก ๋ค๋ฅธ ๋ก๊ทธ์ธ ์์คํ ์ ์ ๊ทผ ๋ฐ ๊ถํ ๊ณต์ ๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
- OAuth์ ๊ฒฝ์ฐ Facebook, Google ๋ฑ ์์ ๊ณ์ ์ ์ด์ฉํ์ฌ ๋ค๋ฅธ ์น์๋น์ค์์๋ ๋ก๊ทธ์ธ์ ํ ์ ์์ต๋๋ค.
- ๋ชจ๋ฐ์ผ ์ดํ๋ฆฌ์ผ์ด์ ํ๊ฒฝ์์๋ ์ ๋์ํฉ๋๋ค.
JWT ๋จ์
- ํ ํฐ์ ํด๋ผ์ด์ธํธ์ ์ ์ฅ๋์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ์กฐ์ํ๋๋ผ๋ ํ ํฐ์ ์ง์ ์ ์ฉํ ์ ์์ต๋๋ค.
- ๋ ๋ง์ ํ๋๊ฐ ์ถ๊ฐ๋๋ฉด ํ ํฐ์ด ์ปค์ง ์ ์์ต๋๋ค.
- ๋น์ํ ์ ํ๋ฆฌ์ผ์ด์ ์์ ํ ํฐ์ ๊ฑฐ์ ๋ชจ๋ ์์ฒญ์ ๋ํด ์ ์ก๋๋ฏ๋ก ๋ฐ์ดํฐ ํธ๋ํฝ ํฌ๊ธฐ์ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค.
- ์ฟ ํค/์ธ์ ๊ณผ ๋ค๋ฅด๊ฒ JWT๋ ํ ํฐ์ ๊ธธ์ด๊ฐ ๊ธธ์ด, ์ธ์ฆ ์์ฒญ์ด ๋ง์์ง์๋ก ๋คํธ์ํฌ ๋ถํ๊ฐ ์ฌํด์ง๋๋ค.
- Payload ์์ฒด๋ ์ํธํ๋์ง ์๊ธฐ ๋๋ฌธ์ ์ ์ ์ ์ค์ํ ์ ๋ณด๋ ๋ด์ ์ ์์ต๋๋ค.
- ํ ํฐ์ ํ์ทจ๋นํ๋ฉด ๋์ฒํ๊ธฐ ์ด๋ ต์ต๋๋ค.
- ํ ํฐ์ ํ ๋ฒ ๋ฐ๊ธ๋๋ฉด ์ ํจ๊ธฐ๊ฐ์ด ๋ง๋ฃ๋ ๋ ๊น์ง ๊ณ์ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
- ํน์ ์ฌ์ฉ์์ ์ ์์ ๊ฐ์ ๋ก ๋ง๋ฃํ๊ธฐ ์ด๋ ต์ง๋ง, ์ฟ ํค/์ธ์ ๊ธฐ๋ฐ ์ธ์ฆ์ ์๋ฒ ์ชฝ์์ ์ฝ๊ฒ ์ธ์ ์ ์ญ์ ํ ์ ์์ต๋๋ค.
References
'๐ฅ Front-End > Web' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Web] ๋ชจ๋ ธ๋ ํฌ(Mono Repo) (0) | 2022.12.06 |
---|---|
[Web] API (0) | 2022.07.19 |