JWT๋ž€ API ์š”์ฒญ์ด ๋“ค์–ด์™”์„ ๊ฒฝ์šฐ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์‚ฌ์šฉ์ž์ธ์ง€ ํ™•์ธํ•˜๋Š” ์ ˆ์ฐจ(=์ธ์ฆ) ๋ฐฉ๋ฒ•์œผ๋กœ์จ JSON WEB TOKEN์ด๋‹ค.

 

ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ์‚ฌ์ด์—์„œ JSON ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ •๋ณด๋ฅผ ์•ˆ์ „์„ฑ ์žˆ๊ฒŒ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๐Ÿ‘€ TOKEN ์ธ์ฆ์˜ ์žฅ์ 

 

  1. ๋ณด์•ˆ์„ฑ - ๋” ์ด์ƒ ์ฟ ํ‚ค๋ฅผ ์ €์žฅํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋” ๋†’์€ ๋ณด์•ˆ์„ฑ์„ ๋ณด์žฅ
  2. ๋ฌด์ƒํƒœ & ํ™•์žฅ์„ฑ - ์„ธ์…˜์„ ์ด์šฉํ•  ๊ฒฝ์šฐ ์—ฌ๋Ÿฌ ๋Œ€์˜ ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์–ด๋–ค ์œ ์ €๊ฐ€ ๋กœ๊ทธ์ธํ–ˆ์„ ๋•Œ ๊ทธ ์œ ์ €๋Š” ์ฒ˜์Œ ๋กœ๊ทธ์ธํ–ˆ๋˜ ์„œ๋ฒ„์—๋งŒ ์š”์ฒญ์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์–ด ์„œ๋ฒ„๋ฅผ ์—ฌ๋Ÿฌ ๋Œ€ ์šด์˜ํ•˜๋Š” ์žฅ์ ์ด ์‚ฌ๋ผ์ง„๋‹ค.
  3. ํ™•์žฅ์„ฑ - ํŽ˜์ด์Šค๋ถ/๊ตฌ๊ธ€ ๊ฐ™์€ ์†Œ์…œ ๊ณ„์ •๋“ค์„ ์ด์šฉํ•˜์—ฌ ๋‹ค๋ฅธ ์›น์„œ๋น„์Šค์—์„œ๋„ ๋กœ๊ทธ์ธ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

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])

+ Recent posts