6_oHji
6_oHji
ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค☺
GitHub   Gmail
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (62)
    • ๐Ÿ’ก DEEP DIVE (17)
      • PATTERN (17)
    • ๐Ÿ“ ๋„์ ๋„์  (4)
    • ๐ŸŒˆ EXPERIENCE (3)
    • ๐Ÿ’ป PROJECT (3)
    • ๐Ÿ“’ STUDY (34)
      • ALGORITHM (1)
      • JAVA (5)
      • FRONT-END (7)
      • BACK-END (10)
      • SPRING (7)
      • NETWORK (3)
      • CLOUD (1)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํ™ˆ
  • ํƒœ๊ทธ

๊ณต์ง€์‚ฌํ•ญ

์ธ๊ธฐ ๊ธ€

์ตœ๊ทผ ๋Œ“๊ธ€

์ตœ๊ทผ ๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ

๊ฐœ์ธ์ •๋ณด

  • ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ
  • ์Šคํ† ๋ฆฌ
  • ํฌ๋Ÿผ
  • ๋กœ๊ทธ์ธ
hELLO ยท Designed By ์ •์ƒ์šฐ.
6_oHji
6_oHji
JWT(JSON Web Token)
๐Ÿ“’ STUDY/BACK-END

JWT(JSON Web Token)

2023. 1. 17. 11:50

JWT(JSON Web Token)๋ž€ ์ธ์ฆ์— ํ•„์š”ํ•œ ์ •๋ณด๋“ค์„ ์•”ํ˜ธํ™”์‹œํ‚จ JSON ํ† ํฐ์ด๋‹ค. JWT ํ† ํฐ(Access Token)์„ HTTP ํ—ค๋”์— ์‹ค์–ด ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ๋ฅผ ์‹๋ณ„ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ธ์ฆํ•œ๋‹ค.

 

JWT๋Š” JSON ๋ฐ์ดํ„ฐ๋ฅผ Base64 URL-safe Encode ๋ฅผ ํ†ตํ•ด ์ธ์ฝ”๋”ฉํ•˜์—ฌ ์ง๋ ฌํ™”ํ•œ ๊ฒƒ์ด๋ฉฐ, ํ† ํฐ ๋‚ด๋ถ€์—๋Š” ์œ„๋ณ€์กฐ ๋ฐฉ์ง€๋ฅผ ์œ„ํ•ด ๊ฐœ์ธํ‚ค๋ฅผ ํ†ตํ•œ ์ „์ž์„œ๋ช…๋„ ๋“ค์–ด์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ์‚ฌ์šฉ์ž๊ฐ€ JWT ๋ฅผ ์„œ๋ฒ„๋กœ ์ „์†กํ•˜๋ฉด ์„œ๋ฒ„๋Š” ์„œ๋ช…์„ ๊ฒ€์ฆํ•˜๋Š” ๊ณผ์ •์„ ๊ฑฐ์น˜๊ฒŒ ๋˜๋ฉฐ ๊ฒ€์ฆ์ด ์™„๋ฃŒ๋˜๋ฉด ์š”์ฒญํ•œ ์‘๋‹ต์„ ๋Œ๋ ค์ค€๋‹ค.

โ” Base64 URL-safe Encode
์ผ๋ฐ˜์ ์ธ Base64 Encode ์—์„œ URL ์—์„œ ์˜ค๋ฅ˜์—†์ด ์‚ฌ์šฉํ•˜๋„๋ก '+', '/' ๋ฅผ ๊ฐ๊ฐ '-', '_' ๋กœ ํ‘œํ˜„ํ•œ ๊ฒƒ์ด๋‹ค.

 

 


๐Ÿ’ก JWT์˜ ๊ตฌ์กฐ

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

JWT์˜ ๊ตฌ์กฐ

  • ํ—ค๋”(Header) :  JWT ์—์„œ ์‚ฌ์šฉํ•  ํƒ€์ž…(ํ† ํฐ ์œ ํ˜•)๊ณผ ํ•ด์‹œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์ข…๋ฅ˜(์„œ๋ช… ์•”ํ˜ธํ™” ์•Œ๊ณ ๋ฆฌ์ฆ˜)
  • ๋‚ด์šฉ(Payload) : ์„œ๋ฒ„์—์„œ ์ฒจ๋ถ€ํ•œ ์‚ฌ์šฉ์ž ๊ถŒํ•œ ์ •๋ณด์™€ ๋ฐ์ดํ„ฐ
  • ์„œ๋ช…(Signature) : Header, Payload ๋ฅผ Base64 URL-safe Encode ํ•œ ํ›„ Header ์— ๋ช…์‹œ๋œ ํ•ด์‹œํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•˜๊ณ , ๊ฐœ์ธํ‚ค(Private Key)๋กœ ์„œ๋ช…ํ•œ ์ „์ž์„œ๋ช…
์ „์ž์„œ๋ช…์—๋Š” ๋น„๋Œ€์นญ ์•”ํ˜ธํ™” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์•”ํ˜ธํ™”๋ฅผ ์œ„ํ•œ ํ‚ค์™€ ๋ณตํ˜ธํ™”๋ฅผ ์œ„ํ•œ ํ‚ค๊ฐ€ ๋‹ค๋ฅด๋‹ค. ์•”ํ˜ธํ™”(์ „์ž์„œ๋ช…)์—๋Š” ๊ฐœ์ธํ‚ค๋ฅผ, ๋ณตํ˜ธํ™”(๊ฒ€์ฆ)์—๋Š” ๊ณต๊ฐœํ‚ค๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

Header์™€ Payload๋Š” ๋‹จ์ˆœํžˆ ์ธ์ฝ”๋”ฉ๋œ ๊ฐ’์ด๊ธฐ ๋•Œ๋ฌธ์— ์ œ 3์ž๊ฐ€ ๋ณตํ˜ธํ™” ๋ฐ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, Signature๋Š” ์„œ๋ฒ„ ์ธก์—์„œ ๊ด€๋ฆฌํ•˜๋Š” ๋น„๋ฐ€ํ‚ค๊ฐ€ ์œ ์ถœ๋˜์ง€ ์•Š๋Š” ์ด์ƒ ๋ณตํ˜ธํ™”ํ•  ์ˆ˜ ์—†๋‹ค. ๋”ฐ๋ผ์„œ Signature๋Š” ํ† ํฐ์˜ ์œ„๋ณ€์กฐ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.

 

 

๐Ÿ’ก JWT ์ธ์ฝ”๋”ฉ / ๋””์ฝ”๋”ฉ ํ•ด๋ณด๊ธฐ

์ง์ ‘ JWT ํ† ํฐ์„ ์ƒ์„ฑํ•ด ์—ฐ์Šตํ•ด๋ณด๊ณ  ์‹ถ๋‹ค๋ฉด, ์•„๋ž˜ ๊ณต์‹์‚ฌ์ดํŠธ์—์„œ ์‰ฝ๊ฒŒ JWT ํ† ํฐ์„ ์ธ์ฝ”๋”ฉ(์ƒ์„ฑ) ํ•˜๊ฑฐ๋‚˜ ๋””์ฝ”๋”ฉ ํ• ์ˆ˜ ์žˆ๋‹ค.

https://jwt.io/

 

JWT.IO

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

jwt.io

 

 

๐Ÿ’ก ์ธ์ฆ ๋ฐฉ์‹

  1. ์‚ฌ์šฉ์ž๊ฐ€ ID, PW๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ์„œ๋ฒ„์— ๋กœ๊ทธ์ธ ์ธ์ฆ์„ ์š”์ฒญํ•œ๋‹ค.
  2. ์„œ๋ฒ„์—์„œ ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ์ธ์ฆ ์š”์ฒญ์„ ๋ฐ›์œผ๋ฉด, Header, PayLoad, Signature๋ฅผ ์ •์˜ํ•œ๋‹ค.
  3. Hedaer, PayLoad, Signature๋ฅผ ๊ฐ๊ฐ Base64๋กœ ํ•œ ๋ฒˆ ๋” ์•”ํ˜ธํ™”ํ•˜์—ฌ JWT๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ด๋ฅผ ์ฟ ํ‚ค์— ๋‹ด์•„ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ฐœ๊ธ‰ํ•œ๋‹ค.
  4. ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ JWT๋ฅผ ๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€์— ์ €์žฅํ•œ๋‹ค. (์ฟ ํ‚ค๋‚˜ ๋‹ค๋ฅธ ๊ณณ์— ์ €์žฅํ•  ์ˆ˜๋„ ์žˆ์Œ) API๋ฅผ ์„œ๋ฒ„์— ์š”์ฒญํ• ๋•Œ Authorization header์— Access Token์„ ๋‹ด์•„์„œ ๋ณด๋‚ธ๋‹ค.
  5. ์„œ๋ฒ„๊ฐ€ ํ•  ์ผ์€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ Header์— ๋‹ด์•„์„œ ๋ณด๋‚ธ JWT๊ฐ€ ๋‚ด ์„œ๋ฒ„์—์„œ ๋ฐœํ–‰ํ•œ ํ† ํฐ์ธ์ง€ ์ผ์น˜ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜์—ฌ ์ผ์น˜ํ•œ๋‹ค๋ฉด ์ธ์ฆ์„ ํ†ต๊ณผ์‹œ์ผœ์ฃผ๊ณ  ์•„๋‹ˆ๋ผ๋ฉด ํ†ต๊ณผ์‹œํ‚ค์ง€ ์•Š์œผ๋ฉด ๋œ๋‹ค.
  6. ์ธ์ฆ์ด ํ†ต๊ณผ๋˜๋ฉด PayLoad์— ๋“ค์–ด์žˆ๋Š” ์œ ์ €์˜ ์ •๋ณด๋“ค์„ selectํ•ด์„œ ํด๋ผ์ด์–ธํŠธ์— ๋Œ๋ ค์ค€๋‹ค.
  7. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์— ์š”์ฒญ์„ ํ–ˆ๋Š”๋ฐ, ๋งŒ์ผ ์•ก์„ธ์Šค ํ† ํฐ์˜ ์‹œ๊ฐ„์ด ๋งŒ๋ฃŒ๋˜๋ฉด ํด๋ผ์ด์–ธํŠธ๋Š” ๋ฆฌํ”„๋ž˜์‹œ ํ† ํฐ์„ ์ด์šฉํ•ด์„œ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์ƒˆ๋กœ์šด ์—‘์„ธ์Šค ํ† ํฐ์„ ๋ฐœ๊ธ‰ ๋ฐ›๋Š”๋‹ค.
โ” Refresh Token
์ƒˆ๋กœ์šด Access Token์„ ๋ฐœ๊ธ‰ํ•ด์ฃผ๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ํ† ํฐ์œผ๋กœ ์งง์€ ์ˆ˜๋ช…์„ ๊ฐ€์ง€๋Š” Access Token์—๊ฒŒ ์ƒˆ๋กœ์šด ํ† ํฐ์„ ๋ฐœ๊ธ‰ํ•ด์ฃผ๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค. ํ•ด๋‹น ํ† ํฐ์€ ๋ณดํ†ต ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์œ ์ € ์ •๋ณด์™€ ๊ฐ™์ด ๊ธฐ๋กํ•œ๋‹ค.

 

 

๐Ÿ’ก ์žฅ์ 

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

 

๐Ÿ’ก ๋‹จ์ 

  1. Self-contained : ํ† ํฐ ์ž์ฒด์— ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ์œผ๋ฏ€๋กœ ์–‘๋‚ ์˜ ๊ฒ€์ด ๋  ์ˆ˜ ์žˆ๋‹ค.
  2. ํ† ํฐ ๊ธธ์ด : ํ† ํฐ์˜ Payload์— 3์ข…๋ฅ˜์˜ ํด๋ ˆ์ž„์„ ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ •๋ณด๊ฐ€ ๋งŽ์•„์งˆ์ˆ˜๋ก ํ† ํฐ์˜ ๊ธธ์ด๊ฐ€ ๋Š˜์–ด๋‚˜ ๋„คํŠธ์›Œํฌ์— ๋ถ€ํ•˜๋ฅผ ์ค„ ์ˆ˜ ์žˆ๋‹ค.
  3. Payload ์ธ์ฝ”๋”ฉ : payload ์ž์ฒด๋Š” ์•”ํ˜ธํ™” ๋œ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ BASE64๋กœ ์ธ์ฝ”๋”ฉ ๋œ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์—, ์ค‘๊ฐ„์— Payload๋ฅผ ํƒˆ์ทจํ•˜์—ฌ ๋””์ฝ”๋”ฉํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, payload์— ์ค‘์š” ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค.
  4. Store Token : stateless ํŠน์ง•์„ ๊ฐ€์ง€๊ธฐ ๋•Œ๋ฌธ์—, ํ† ํฐ์€ ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ ๊ด€๋ฆฌํ•˜๊ณ  ์ €์žฅํ•œ๋‹ค. ๋•Œ๋ฌธ์— ํ† ํฐ ์ž์ฒด๋ฅผ ํƒˆ์ทจ๋‹นํ•˜๋ฉด ๋Œ€์ฒ˜ํ•˜๊ธฐ๊ฐ€ ์–ด๋ ต๊ฒŒ ๋œ๋‹ค.

 

 

๐Ÿ’ก ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ ๋ฐฉ์‹(Cookie & Session & JWT)์˜ ์žฅ๋‹จ์ 

Cookie & Session & JWT ์žฅ๋‹จ์ 

 

 

 

โ” JWT(Jason Web Token) ์•Œ์•„๋ณด๊ธฐ

 

[SERVER] ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ ๋ฐฉ์‹ - Cookie, Session, Token

์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ์„ ํ™•์ธํ•˜๋Š” ๋ฐฉ์‹์€ ๋Œ€ํ‘œ์ ์œผ๋กœ ์ฟ ํ‚ค, ์„ธ์…˜, ํ† ํฐ 3๊ฐ€์ง€ ๋ฐฉ์‹์ด ์žˆ๋‹ค. ๐Ÿ“Œ Cookie ์ฟ ํ‚ค๋Š” Key-Value ํ˜•์‹์˜ ๋ฌธ์ž์—ด ๋ฉ์–ด๋ฆฌ๋กœ, ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์–ด๋– ํ•œ ์›น์‚ฌ์ดํŠธ๋ฅผ ๋ฐฉ๋ฌธํ•  ๊ฒฝ์šฐ, ๊ทธ

easyhomputer.tistory.com

 

๋‚ด์šฉ ๋ฐ ์‚ฌ์ง„ ์ถœ์ฒ˜

https://inpa.tistory.com/entry/WEB-%F0%9F%93%9A-JWTjson-web-token-%EB%9E%80-%F0%9F%92%AF-%EC%A0%95%EB%A6%AC#JWT_(JSON_Web_Token) 

๋ฐ˜์‘ํ˜•
์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋™์ผ์กฐ๊ฑด (์ƒˆ์ฐฝ์—ด๋ฆผ)
    '๐Ÿ“’ STUDY/BACK-END' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • HTTP์™€ HTTPS
    • ๋ธŒ๋ผ์šฐ์ €์™€ ์„œ๋ฒ„์˜ ๊ด€๊ณ„ - ์š”์ฒญ๊ณผ ์‘๋‹ต, GET/POST ๋ฐฉ์‹, ์ •์ /๋™์  ๋ฐ์ดํ„ฐ
    • ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ ๋ฐฉ์‹ - Cookie, Session, Token
    • CI/CD๋ž€?
    6_oHji
    6_oHji
    ๋„์ ๋„์ 

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”