JWT๋ API ์์ฒญ์ด ๋ค์ด์์ ๊ฒฝ์ฐ ์ฌ์ฉ ๊ฐ๋ฅํ ์ฌ์ฉ์์ธ์ง ํ์ธํ๋ ์ ์ฐจ(=์ธ์ฆ) ๋ฐฉ๋ฒ์ผ๋ก์จ JSON WEB TOKEN์ด๋ค.
ํด๋ผ์ด์ธํธ์ ์๋ฒ ์ฌ์ด์์ JSON ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ ์ ๋ณด๋ฅผ ์์ ์ฑ ์๊ฒ ์ ๋ฌํ ์ ์๋ค.
๐ TOKEN ์ธ์ฆ์ ์ฅ์
- ๋ณด์์ฑ - ๋ ์ด์ ์ฟ ํค๋ฅผ ์ ์ฅํ์ง ์๊ธฐ ๋๋ฌธ์ ๋ ๋์ ๋ณด์์ฑ์ ๋ณด์ฅ
- ๋ฌด์ํ & ํ์ฅ์ฑ - ์ธ์ ์ ์ด์ฉํ ๊ฒฝ์ฐ ์ฌ๋ฌ ๋์ ์๋ฒ๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ์ด๋ค ์ ์ ๊ฐ ๋ก๊ทธ์ธํ์ ๋ ๊ทธ ์ ์ ๋ ์ฒ์ ๋ก๊ทธ์ธํ๋ ์๋ฒ์๋ง ์์ฒญ์ ๋ณด๋ผ ์ ์์ด ์๋ฒ๋ฅผ ์ฌ๋ฌ ๋ ์ด์ํ๋ ์ฅ์ ์ด ์ฌ๋ผ์ง๋ค.
- ํ์ฅ์ฑ - ํ์ด์ค๋ถ/๊ตฌ๊ธ ๊ฐ์ ์์ ๊ณ์ ๋ค์ ์ด์ฉํ์ฌ ๋ค๋ฅธ ์น์๋น์ค์์๋ ๋ก๊ทธ์ธ์ด ๊ฐ๋ฅํ๋ค.
OAuth : ํ์ด์ค๋ถ์ผ๋ก ๋ก๊ทธ์ธํ๊ธฐ์ฒ๋ผ ๋ค๋ฅธ ์น ์๋น์ค์ ๊ณ์ ์ผ๋ก ์ฌ์ฉ์ ์ธ์ฆ์ ๋์ ํ๋ ๊ธฐ์
๐ JWT ํ๋ก์ธ์ค
ํด๋ผ์ด์ธํธ์์ JSON ๊ฐ์ฒด ํ์์ผ๋ก id์ password๋ฅผ ๋ณด๋ธ๋ค. ๊ทธ๋ฌ๋ฉด ์๋ฒ์์ ์ํธํํ์ฌ ๋ฌธ์์ด๋ก ๋ JWT๋ฅผ ์ฃผ๊ณ ๋ค์๋ถํฐ ํด๋ผ์ด์ธํธ๋ HTTP HEADER์ JWT๋ฅผ ์ถ๊ฐํจ์ผ๋ก์จ ์ฌ์ฉ์ ์ธ์ฆ์ ์์ฒญํ๋ค. ์๋ฒ๋ JWT๋ฅผ ๋ฐ์ ๋ค์ ๋์ฝ๋ฉํ์ฌ ํด๋ผ์ด์ธํธ์์ ์์ฒญํ ์ฌ์ฉ์์ ์ ๋ณด๋ฅผ ์ผ์น์ํจ๋ค.
๐ JWT์ ๊ตฌ์กฐ์ ์์ฑ

JWT๋ Header(ํค๋), Payload(๋ด์ฉ), Verify Signature(์๋ช )์ผ๋ก ๊ตฌ์ฑ๋์ด์๋ค.
1๏ธโฃ Header - ํ ํฐ ์ ๋ณด
- typ - ํ ํฐ์ ํ์ ์ ๋ช ์
- alg - ํด์ฑ ์๊ณ ๋ฆฌ์ฆ์ ๋ช ์
2๏ธโฃ Payload - ์ ๋ฌํ ์ ๋ณด
- claim : name: value์ ํ ์์ ์๋ฏธ -> ๋ฐ๋ผ์ ํ๋์ ํ ํฐ์ ์ฌ๋ฌ ๊ฐ์ ํด๋ ์์ ๋ฃ์ ์ ์๋ค.
โ ํด๋ ์์ ์ข ๋ฅ
- ์ง์ ๋ ํด๋ ์(registerd Claim) - ํ ํฐ์ ๋ํ ์ ๋ณด๋ค์ ๋ด๊ธฐ ์ํ์ฌ ํด๋ ์ ์ด๋ฆ์ด ์ด๋ฏธ ์ ํด์ง ํด๋ ์
- ๊ณต๊ฐ ํ๋ ์(public Claim) - ํด๋ ์ ์ด๋ฆ์ผ๋ก URL์ ์ฌ์ฉํ์ฌ URL์ด ์ค๋ณต๋๋ ๊ฒ์ ํผํด ์ถฉ๋์ ๋ฐฉ์งํด์ผ ํ๋ค.
- ๋น๊ณต๊ฐ ํ๋ ์(private Claim) - ํด๋ผ์ด์ธํธ์ ์๋ฒ ํฉ์ ํ์ ์ฌ์ฉ๋๋ ํด๋ ์ ์ด๋ฆ๋ค
3๏ธโฃ Verify Signature - ํ ํฐ์ด ๊ฒ์ฆ๋์๋ค๋ ์ฌ์ค์ ์ฆ๋ช
- JWTํ์์ผ๋ก ๋ง๋ค๊ณ ์ํธํํ๋ ๊ณผ์
๐ JWT Module
- ํ ํฐ ์์ฑ ๋ฉ์๋ - jwt.sign(json data, secretKey, [options, callback])
- ํ ํฐ ํ์ธ ๋ฉ์๋ - jwt.verify(token, secretKey, [options, callback])
'Server' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| Django, Spring, Node.js์ ํน์ง๊ณผ ์ฅ๋จ์ (1) | 2021.07.14 |
|---|---|
| ์ธ์ฆ ๋ฐฉ๋ฒ์ธ Cookie์ Session์ ๋ํด ์์๋ณด์ (0) | 2021.03.24 |
| Web Server์ WAS์ ์ ์์ ์ฐจ์ด (0) | 2021.01.15 |