article thumbnail image
Published 2022. 7. 19. 01:10

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 ์ธ์ฆ๊ณผ์ •

JWT ๊ณผ์ •

  • ํด๋ผ์ด์–ธํŠธ ๋กœ๊ทธ์ธ ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด, ์„œ๋ฒ„๋Š” ๊ฒ€์ฆ ํ›„ ํด๋ผ์ด์–ธํŠธ ๊ณ ์œ  ID ๋“ฑ์˜ ์ •๋ณด๋ฅผ Payload์— ๋‹ด์Šต๋‹ˆ๋‹ค.
  • ์•”ํ˜ธํ™”ํ•  ๋น„๋ฐ€ํ‚ค๋ฅผ ์‚ฌ์šฉํ•ด Access Token(JWT)์„ ๋ฐœ๊ธ‰ํ•ฉ๋‹ˆ๋‹ค.
  • ํด๋ผ์ด์–ธํŠธ๋Š” ์ „๋‹ฌ๋ฐ›์€ ํ† ํฐ์„ ์ €์žฅํ•ด๋‘๊ณ , ์„œ๋ฒ„์— ์š”์ฒญํ•  ๋•Œ ๋งˆ๋‹ค ํ† ํฐ์„ ์š”์ฒญ ํ—ค๋” Authorization์— ํฌํ•จ์‹œ์ผœ ํ•จ๊ป˜ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
  • ์„œ๋ฒ„๋Š” ํ† ํฐ์˜ Signature๋ฅผ ๋น„๋ฐ€ํ‚ค๋กœ ๋ณตํ˜ธํ™”ํ•œ ๋‹ค์Œ, ์œ„๋ณ€์กฐ ์—ฌ๋ถ€ ๋ฐ ์œ ํšจ ๊ธฐ๊ฐ„ ๋“ฑ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  • ์œ ํšจํ•œ ํ† ํฐ์ด๋ผ๋ฉด ์š”์ฒญ์— ์‘๋‹ตํ•ฉ๋‹ˆ๋‹ค.

JWT ์žฅ์ 

  • Header์™€ Payload๋ฅผ ๊ฐ€์ง€๊ณ  Signature๋ฅผ ์ƒ์„ฑํ•˜๋ฏ€๋กœ ๋ฐ์ดํ„ฐ ์œ„๋ณ€์กฐ๋ฅผ ๋ง‰์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ธ์ฆ ์ •๋ณด์— ๋Œ€ํ•œ ๋ณ„๋„์˜ ์ €์žฅ์†Œ๊ฐ€ ํ•„์š”์—†์Šต๋‹ˆ๋‹ค.
  • JWT๋Š” ํ† ํฐ์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ์ •๋ณด์™€ ์ „๋‹ฌํ•  ์ •๋ณด ๋ฐ ํ† ํฐ์ด ๊ฒ€์ฆ๋ฌ์Œ์„ ์ฆ๋ช…ํ•˜๋Š” ์„œ๋ช… ๋“ฑ ํ•„์š”ํ•œ ๋ชจ๋“  ์ •๋ณด๋ฅผ ์ž์ฒด์ ์œผ๋กœ ์ง€๋‹ˆ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” ์„ธ์…˜๊ณผ ๋‹ค๋ฅด๊ฒŒ, ์„œ๋ฒ„๋Š” ๋ฌด์ƒํƒœ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.
  • ํ™•์žฅ์„ฑ์ด ์šฐ์ˆ˜ํ•ฉ๋‹ˆ๋‹ค.
  • ํ† ํฐ ๊ธฐ๋ฐ˜์œผ๋กœ ๋‹ค๋ฅธ ๋กœ๊ทธ์ธ ์‹œ์Šคํ…œ์— ์ ‘๊ทผ ๋ฐ ๊ถŒํ•œ ๊ณต์œ ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • OAuth์˜ ๊ฒฝ์šฐ Facebook, Google ๋“ฑ ์†Œ์…œ ๊ณ„์ •์„ ์ด์šฉํ•˜์—ฌ ๋‹ค๋ฅธ ์›น์„œ๋น„์Šค์—์„œ๋„ ๋กœ๊ทธ์ธ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ชจ๋ฐ”์ผ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ™˜๊ฒฝ์—์„œ๋„ ์ž˜ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

JWT ๋‹จ์ 

  • ํ† ํฐ์€ ํด๋ผ์ด์–ธํŠธ์— ์ €์žฅ๋˜์–ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ์กฐ์ž‘ํ•˜๋”๋ผ๋„ ํ† ํฐ์— ์ง์ ‘ ์ ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  • ๋” ๋งŽ์€ ํ•„๋“œ๊ฐ€ ์ถ”๊ฐ€๋˜๋ฉด ํ† ํฐ์ด ์ปค์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋น„์ƒํƒœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ํ† ํฐ์€ ๊ฑฐ์˜ ๋ชจ๋“  ์š”์ฒญ์— ๋Œ€ํ•ด ์ „์†ก๋˜๋ฏ€๋กœ ๋ฐ์ดํ„ฐ ํŠธ๋ž˜ํ”ฝ ํฌ๊ธฐ์— ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ฟ ํ‚ค/์„ธ์…˜๊ณผ ๋‹ค๋ฅด๊ฒŒ JWT๋Š” ํ† ํฐ์˜ ๊ธธ์ด๊ฐ€ ๊ธธ์–ด, ์ธ์ฆ ์š”์ฒญ์ด ๋งŽ์•„์งˆ์ˆ˜๋ก ๋„คํŠธ์›Œํฌ ๋ถ€ํ•˜๊ฐ€ ์‹ฌํ•ด์ง‘๋‹ˆ๋‹ค.
  • Payload ์ž์ฒด๋Š” ์•”ํ˜ธํ™”๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์œ ์ €์˜ ์ค‘์š”ํ•œ ์ •๋ณด๋Š” ๋‹ด์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  • ํ† ํฐ์„ ํƒˆ์ทจ๋‹นํ•˜๋ฉด ๋Œ€์ฒ˜ํ•˜๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.
  • ํ† ํฐ์€ ํ•œ ๋ฒˆ ๋ฐœ๊ธ‰๋˜๋ฉด ์œ ํšจ๊ธฐ๊ฐ„์ด ๋งŒ๋ฃŒ๋  ๋•Œ ๊นŒ์ง€ ๊ณ„์† ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
  • ํŠน์ • ์‚ฌ์šฉ์ž์˜ ์ ‘์†์„ ๊ฐ•์ œ๋กœ ๋งŒ๋ฃŒํ•˜๊ธฐ ์–ด๋ ต์ง€๋งŒ, ์ฟ ํ‚ค/์„ธ์…˜ ๊ธฐ๋ฐ˜ ์ธ์ฆ์€ ์„œ๋ฒ„ ์ชฝ์—์„œ ์‰ฝ๊ฒŒ ์„ธ์…˜์„ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

References

 

์ธ์ฆ ๋ฐฉ์‹ : Cookie & Session vs JWT

1. HTTP ํŠน์„ฑ HTTP๋Š” ์ธํ„ฐ๋„ท ์ƒ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๊ธฐ ์œ„ํ•œ ์„œ๋ฒ„/ํด๋ผ์ด์–ธํŠธ ๋ชจ๋ธ์„ ๋”ฐ๋ฅด๋Š” ํ”„๋กœํ† ์ฝœ์ž…๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์—๊ฒŒ ์š”์ฒญ์„ ๋ณด๋‚ด๋ฉด ์„œ๋ฒ„๋Š” ์‘๋‹ต์„ ๋ณด๋ƒ„์œผ๋กœ์จ, ๋ฐ์ดํ„ฐ๋ฅผ ๊ตํ™˜ํ•ฉ

tecoble.techcourse.co.kr

 

JWT.IO

JSON Web Tokens are an open, industry standard RFC 7519 method for representing claims securely between two parties.

jwt.io

 

JWT (JSON Web Token) ์ดํ•ดํ•˜๊ธฐ์™€ ํ™œ์šฉ ๋ฐฉ์•ˆ - Opennaru, Inc.

JWT ๋Š” JSON Web Token์˜ ์•ฝ์ž๋กœ ์ „์ž ์„œ๋ช… ๋œ URL-safe (URL๋กœ ์ด์šฉํ•  ์ˆ˜์žˆ๋Š” ๋ฌธ์ž ๋งŒ ๊ตฌ์„ฑ๋œ)์˜ JSON์ž…๋‹ˆ๋‹ค.JWT๋Š” ์†์„ฑ ์ •๋ณด (Claim)๋ฅผ JSON ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋กœ ํ‘œํ˜„ํ•œ ํ† ํฐ์œผ๋กœ RFC7519 ํ‘œ์ค€ ์ž…๋‹ˆ๋‹ค.

www.opennaru.com

'๐Ÿ”ฅ Front-End > Web' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Web] ๋ชจ๋…ธ๋ ˆํฌ(Mono Repo)  (0) 2022.12.06
[Web] API  (0) 2022.07.19
๋ณต์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค!