JWT (JSON WEB TOKEN)

HTTP๋Š” 2๊ฐ€์ง€ ํŠน์ง•์ด ์กด์žฌํ•œ๋‹ค. ๋ฌด์ƒํƒœ์„ฑ(Stateless), ๋น„์—ฐ๊ฒฐ์„ฑ(Connectionless)

๋ฌด์ƒํƒœ์„ฑ(Stateless)

HTTP๋Š” ์ƒํƒœ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ด๋ง์€ ์ฆ‰, ๋ˆ„๊ตฌ์˜ ์š”์ฒญ์ธ์ง€ ๊ตฌ๋ถ„์„ ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ์˜๋ฏธ๋‹ค. ๋”ฐ๋ผ์„œ ์š”์ฒญ ์ •๋ณด๋ฅผ ํŠน์ •ํ•˜๊ธฐ ์œ„ํ•ด์„œ Cookie, Session, Token ์ธ์ฆ์„ ํ†ตํ•ด ํด๋ผ์ด์–ธํŠธ๋ฅผ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋น„์—ฐ๊ฒฐ์„ฑ(Connectionless)

ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๊ฐ„์˜ ์š”์ฒญ๊ณผ ์‘๋‹ต์ด ๋๋‚œ๋’ค ์—ฐ๊ฒฐ์„ ๋Š์–ด๋ฒ„๋ฆฌ๋Š” ์„ฑ์งˆ์ด๋‹ค. HTTP๋Š” ์ธํ„ฐ๋„ท ์ƒ์—์„œ ๋ถˆํŠน์ • ๋‹ค์ˆ˜์˜ ํ†ต์‹ ํ™˜๊ฒฝ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์„ค๊ณ„๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์—, ์„œ๋ฒ„๊ฐ€ ๋‹ค์ˆ˜์˜ ํด๋ผ์ด์–ธํŠธ์™€ ์—ฐ๊ฒฐ์„ ๊ณ„์† ์œ ์ง€ํ•ด์•ผ ํ•œ๋‹ค๋ฉด, ๋งŽ์€ ๋ฆฌ์†Œ์Šค ์ ์œ ๋“ฑ์˜ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

HTTP์˜ ์ด๋Ÿฌํ•œ ํŠน์ง•์œผ๋กœ ์ธํ•ด ์•„๋ž˜์˜ ๋ฐฉ๋ฒ•์œผ๋กœ ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.


์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ์„ ํ™•์ธํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ Cookie, Session, Token ๋ฐฉ์‹์ด ์žˆ๋‹ค.

  • ๋งŒ๋ฃŒ๊ธฐ๊ฐ„์ด ์žˆ๋Š” key-value ํ˜•ํƒœ์˜ ์ €์žฅ์†Œ

๋„ค์ด๋ฒ„ ์š”์ฒญ ํ—ค๋”
์ฟ ํ‚ค ์ธ์ฆ ๋ฐฉ์‹

์ฟ ํ‚ค์˜ ๋‹จ์ 

  • ๋ณด์•ˆ์— ์ทจ์•ฝํ•˜๋‹ค. ๋ฏผ๊ฐํ•œ ์ •๋ณด๋ฅผ ์ฟ ํ‚ค์— ์ €์žฅํ•  ๊ฒฝ์šฐ ๊ทธ๋Œ€๋กœ ๋…ธ์ถœ

  • 4kb์˜ ์šฉ๋Ÿ‰์ œํ•œ

  • ๋ธŒ๋ผ์šฐ์ € ๋งˆ๋‹ค ์ฟ ํ‚ค ์ง€์› ํ˜•ํƒœ๊ฐ€ ๋‹ฌ๋ผ ๋ธŒ๋ผ์šฐ์ €๊ฐ„ ๊ณต์œ ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅ


์„ธ์…˜(Session)

  • ๋ฏผ๊ฐํ•œ ์ •๋ณด๋ฅผ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์•„๋‹Œ ์„œ๋ฒ„์—์„œ ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•จ

์„ธ์„  ๊ฐ์ฒด

  • ์„ธ์…˜ ๊ฐ์ฒด๋Š” Session ID๋ฅผ key๋กœ ๊ฐ–๋Š” key-value๋กœ ๊ตฌ์„ฑ

  • value์— ์„ธ์„  ์ƒ์„ฑ ์‹œ๊ฐ„, ๋งˆ์ง€๋ง‰ ์ ‘๊ทผ ์‹œ๊ฐ„, ๊ธฐํƒ€ ์ •๋ณด๋“ค์ด Mapํ˜•ํƒœ๋กœ ์ €์žฅ๋จ

์„ธ์…˜ ๊ฐ์ฒด
์„ธ์…˜ ์ธ์ฆ ๋ฐฉ์‹

์„ธ์…˜์˜ ๋‹จ์ 

  • ์ฟ ํ‚ค์— ์ €์žฅ๋œ ์„ธ์…˜ ID ์ž์ฒด๋Š” ์œ ์˜๋ฏธํ•œ ๊ฐœ์ธ์ •๋ณด๋ฅผ ๋‹ด๊ณ ์žˆ์ง€ ์•Š์ง€๋งŒ ์ œ3์ž๊ฐ€ ์ด๋ฅผ ํƒˆ์ทจํ•˜์—ฌ ์ธ์ฆ๋œ ์œ ์ €์ธ์ฒ™ ์œ„์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์„œ๋ฒ„ ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ํŠธ๋ž˜ํ”ฝ ์ฆ๊ฐ€์‹œ ์„œ๋ฒ„ ๋ถ€ํ•˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.


ํ† ํฐ(Token)

  • ์œ ์ € ์ •๋ณด๋ฅผ ๋‹ด๊ณ ์žˆ๋Š” ํ† ํฐ ์ธ์ฆ ๋ฐฉ์‹

  • ํ† ํฐ์€ ์š”์ฒญ ํ—ค๋”์˜ Authorization ํ•„๋“œ์— ๋‹ด์•„ ์ „์†กํ•œ๋‹ค.

  • Authorization: {type} {credentials} ํฌ๋ฉง์œผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.

  • Bearer ํƒ€์ž…์„ ๊ฐ–๋Š” JWT ์ด์™ธ์—๋„ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ํ† ํฐ์ด ์กด์žฌํ•˜๋Š”๋ฐ ๊ฐ ํ† ํฐ๋ณ„ ํƒ€์ž…์ด ์กด์žฌํ•œ๋‹ค.

  • ํ† ํฐ์„ ๋ฐœ๊ธ‰๋ฐ›์€ ์ดํ›„ ๋งค ์š”์ฒญ๋งˆ๋‹ค ํ—ค๋”์— ํ† ํฐ์ด ํฌํ•จ๋˜์–ด ์ „์†ก๋œ๋‹ค.

Authorization ํ•„๋“œ

ํ† ํฐ์˜ ๋‹จ์ 

  • ํ† ํฐ์˜ ์šฉ๋Ÿ‰์ด ํด ๊ฒฝ์šฐ ๋„คํŠธ์›Œํฌ ํ†ต์‹  ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ํ† ํฐ์˜ Payload๋Š” ์•”ํ˜ธํ™”๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋ฏผ๊ฐํ•œ ์ •๋ณด๋ฅผ ๋‹ด์„ ์ˆ˜ ์—†๋‹ค.

  • ์ œ3์ž๊ฐ€ ํ† ํฐ์„ ํƒˆ์ทจํ–ˆ์„ ๊ฒฝ์šฐ ๋Œ€์ฒ˜๊ฐ€ ์–ด๋ ต๋‹ค. (Expires, Refresh Token์„ ์ด์šฉํ•ด ์˜ˆ๋ฐฉ)

์„ธ์…˜ VS ํ† ํฐ

์„ธ์…˜๊ธฐ๋ฐ˜ ์ธ์ฆ

  • ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด๋ฅผ ์„œ๋ฒ„์ธก ์„ธ์…˜ ์ €์žฅ์†Œ(๋ฉ”๋ชจ๋ฆฌ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋“ฑ)์— ์ €์žฅ ๋ฐ ๊ด€๋ฆฌํ•œ๋‹ค.

  • ์„œ๋ฒ„ ์ž์›์„ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์š”์ฒญ๋Ÿ‰ ์ฆ๊ฐ€์‹œ ์„œ๋ฒ„ ๋ถ€ํ•˜๊ฐ€ ์ฆ๊ฐ€ํ•œ๋‹ค.

ํ† ํฐ๊ธฐ๋ฐ˜ ์ธ์ฆ

  • ์„œ๋ฒ„๋กœ ๋ถ€ํ„ฐ ๋ฐœ๊ธ‰๋œ ์œ ์ € ์ •๋ณด๊ฐ€ ๋‹ด๊ธด ํ† ํฐ์„ ๋ธŒ๋ผ์šฐ์ €์— ์ €์žฅ ๋ฐ ๊ด€๋ฆฌํ•œ๋‹ค.

  • ๋ธŒ๋ผ์šฐ์ €์— ์ €์žฅ๋˜๋ฏ€๋กœ ์„œ๋ฒ„ ์ž์›์„ ์•„๋‚„ ์ˆ˜ ์žˆ์ง€๋งŒ ํ† ํฐ์˜ ์šฉ๋Ÿ‰์ด ํด ๊ฒฝ์šฐ ๋„คํŠธ์›Œํฌ ํ†ต์‹  ์˜ค๋ฒ„ํ—ค๋“œ ๋ฐœ์ƒ


JWT(Json Web Token)

JWT๋Š” ์š”์ฒญ์— ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์•”ํ˜ธํ™”์‹œํ‚จ JSON ํ† ํฐ์„ ์˜๋ฏธํ•œ๋‹ค. JWT๋Š” ํ† ํฐ ๊ธฐ๋ฐ˜ ์ธ์ฆ์œผ๋กœ HTTP ํ—ค๋”์— ๋‹ด์•„ ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ๋ฅผ ์‹๋ณ„ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.JWT๋Š” JSON ๋ฐ์ดํ„ฐ๋ฅผ base64 URL-safe Encode๋ฅผ ํ†ตํ•ด ์ธ์ฝ”๋”ฉํ•˜๋ฉฐ, ํ† ํฐ ๋‚ด๋ถ€์—๋Š” ์œ„๋ณ€์กฐ ๋ฐฉ์ง€๋ฅผ ์œ„ํ•ด ๊ฐœ์ธํ‚ค(secret key)๋ฅผ ํ†ตํ•œ ์ „์ž์„œ๋ช…์ด ํฌํ•จ๋˜์–ด์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ํ† ํฐ์„ ์ „๋‹ฌ๋ฐ›์€ ์„œ๋ฒ„๋Š” ๊ฒ€์ฆ(verify)์„ ํ†ตํ•ด ์™„๋ฃŒ๋˜๋ฉด ์‘๋‹ต์„ ์ „์†กํ•œ๋‹ค.

JWT ๊ตฌ์กฐ

JWT๋Š” . ๊ตฌ๋ถ„์ž๋กœ ๋‚˜๋ˆ„์–ด์ง€๋Š” ์„ธ๊ฐ€์ง€ ๋ฌธ์ž์—ด์˜ ์กฐํ•ฉ์ด๋‹ค. ๊ฐ๊ฐ ์™ผ์ชฝ์—์„œ๋ถ€ํ„ฐ Header, Payload, Signature๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

JWT ๊ตฌ์กฐ
  • typ: ํ† ํฐ ์œ ํ˜•

  • alg: ํ•ด์‹œ ์•Œ๊ณ ๋ฆฌ์ฆ˜

Payload

  • ํ† ํฐ์—์„œ ์‚ฌ์šฉํ•  ์ •๋ณด Claim์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค.

  • ์‹œ์Šคํ…œ์—์„œ ์‹ค์ œ๋กœ ์‚ฌ์šฉ๋  ์ •๋ณด๋ฅผ ๋‹ด๋Š”๋‹ค.

Signature

  • ํ—ค๋”, ํŽ˜์ด๋กœ๋“œ๋ฅผ base64 url๋ฐฉ์‹ ์ธ์ฝ”๋”ฉํ•œ ํ›„ Hedaer์— ๋ช…์‹œํ•œ ํ•ด์‹œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ ์šฉํ•˜๊ณ  secret key๋กœ ์„œ๋ช…ํ•œ ์ „์ž์„œ๋ช…์ด ๋‹ด๊ฒจ์žˆ๋‹ค.


์ฐธ๊ณ 

JWT Docs JWT ํ† ํฐ ์ธ์ฆ ์ด๋ž€? (์ฟ ํ‚ค vs ์„ธ์…˜ vs ํ† ํฐ)

Last updated