JWT

  • RFC 7519
  • ํ† ํฐ ๊ธฐ๋ฐ˜ ์ธ์ฆ ๋ฐฉ์‹. ์„œ๋ฒ„์˜ ๋ฌด์ƒํƒœ์„ฑ, ํ™•์žฅ์„ฑ, ๋ณด์•ˆ์„ฑ์„ ํ™•๋ณดํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ตฌ์กฐ

  • Header, Payload, Signature ์„ธ ๋ถ€๋ถ„์œผ๋กœ ๊ตฌ์„ฑ๋จ.
  • ์„ธ ๋ถ€๋ถ„์€ .์œผ๋กœ ๊ตฌ๋ถ„ํ•œ๋‹ค. (xxxxx.yyyyy.zzzzz)
  • ํ† ํฐ์˜ ํƒ€์ž…, ์„œ๋ช… ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ •๋ณด๋ฅผ ํฌํ•จํ•˜๋Š” JSON ํฌ๋งท:
    {
      "alg": "HS256",
      "typ": "JWT"
    }
    
  • Base64Url๋กœ ์ธ์ฝ”๋”ฉ๋˜์–ด JWT์˜ ์ฒซ ๋ฒˆ์งธ ๋ถ€๋ถ„์œผ๋กœ ๋“ค์–ด๊ฐ„๋‹ค.

Payload

  • ํŽ˜์ด๋กœ๋“œ๋Š” ํด๋ ˆ์ž„๋“ค์„ ๊ฐ€์ง„ JSON ํฌ๋งท:
    {
      "sub": "1234567890",
      "name": "John Doe",
      "admin": true
    }
    
  • ํด๋ ˆ์ž„์€ ์—”ํ‹ฐํ‹ฐ(์œ ์ €)์™€ ์ถ”๊ฐ€์ ์ธ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์ƒํƒœ.
  • ์„ธ ๊ฐ€์ง€ ์ข…๋ฅ˜์˜ ํด๋ ˆ์ž„์ด ์žˆ๋‹ค:
    • registered claims: ํ•„์ˆ˜๋Š” ์•„๋‹ˆ์ง€๋งŒ ๊ถŒ์žฅ๋œ๋‹ค:
      • iss(issuer)
      • exp(expiration time)
      • sub(subject)
      • aud(audience)
      • others
    • public claims: URI ํ˜•์‹์œผ๋กœ ์ถฉ๋Œ์ด ๋ฐฉ์ง€๋œ ์ด๋ฆ„์„ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค.
    • private claims: ์ปค์Šคํ…€ ํด๋ ˆ์ž„. ์–‘์ธก ์‚ฌ์ด์— ํ•ฉ์˜๋œ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•œ๋‹ค.
  • Base64Url๋กœ ์ธ์ฝ”๋”ฉ๋˜์–ด JWT์˜ ๋‘ ๋ฒˆ์งธ ๋ถ€๋ถ„์œผ๋กœ ๋“ค์–ด๊ฐ„๋‹ค.

Signature

  • ์ธ์ฝ”๋”ฉ๋œ ํ—ค๋”์™€ ํŽ˜์ด๋กœ๋“œ, ์‹œํฌ๋ฆฟ์„ ํ—ค๋”์— ๋ช…์‹œ๋œ ์„œ๋ช… ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ์ธ์ฝ”๋”ฉํ•œ ๋ฌธ์ž์—ด:
    HMACSHA256(
    base64UrlEncode(header) + "." +
    base64UrlEncode(payload),
    secret)
    
  • Base64Url๋กœ ์ธ์ฝ”๋”ฉ๋˜์–ด JWT์˜ ์„ธ ๋ฒˆ์งธ ๋ถ€๋ถ„์œผ๋กœ ๋“ค์–ด๊ฐ„๋‹ค.

ํ•ฉ์น˜๊ธฐ

  • ํ—ค๋”, ํŽ˜์ด๋กœ๋“œ, ์‹œ๊ทธ๋‹ˆ์ฒ˜๋ฅผ .์„ ๊ตฌ๋ถ„์ž๋กœ ๋ชจ๋‘ ํ•ฉ์น˜๋ฉด ํ•˜๋‚˜์˜ JWT๊ฐ€ ๋œ๋‹ค.

๋™์ž‘ ๋ฐฉ์‹

  • ๊ธฐ์กด ์„œ๋ฒ„ ๊ธฐ๋ฐ˜ ์ธ์ฆ์˜ ๊ฒฝ์šฐ ์„œ๋ฒ„๊ฐ€ ์„ธ์…˜ ์ •๋ณด๋ฅผ ๋“ค๊ณ  ์žˆ์–ด์•ผ ํ–ˆ๋‹ค:
    sequenceDiagram participant S as Server participant C as Client S->>C: ์›น ํŽ˜์ด์ง€ C->>S: ๋กœ๊ทธ์ธ ์š”์ฒญ Note left of S: ์„ธ์…˜ ์ƒ์„ฑ S->>C: ๋กœ๊ทธ์ธ ์‘๋‹ต C->>S: ์š”์ฒญ Note left of S: ์„ธ์…˜ ์ €์žฅ์†Œ ์กฐํšŒ S->>C: ์‘๋‹ต
  • ํ† ํฐ ๊ธฐ๋ฐ˜์œผ๋กœ ์ธ์ฆํ•˜๋ฉด ์„œ๋ฒ„๊ฐ€ ํ† ํฐ์˜ ์œ ํšจ์„ฑ๋งŒ ๊ฒ€์ฆํ•œ๋‹ค:
    • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์˜ ๋ณดํ˜ธ๋œ ์ž์›์— ์ ‘๊ทผํ•˜๋ ค๋ฉด ์š”์ฒญ์— JWT๋ฅผ ๋‹ด์•„ ๋ณด๋‚ธ๋‹ค:
      Authorization: Bearer <token>
      
    • ์„œ๋ฒ„๋Š” ์š”์ฒญ์˜ Authorization ํ—ค๋”์— ๋‹ด๊ธด JWT์˜ ์œ ํšจ์„ฑ์„ ๊ฒ€์ฆํ•˜๊ณ  ์‘๋‹ตํ•œ๋‹ค.
    sequenceDiagram participant S as Server participant C as Client S->>C: ์›น ํŽ˜์ด์ง€ C->>S: ๋กœ๊ทธ์ธ ์š”์ฒญ Note left of S: ํ† ํฐ ์ƒ์„ฑ S->>C: ๋กœ๊ทธ์ธ ์‘๋‹ต Note right of C: ํ† ํฐ ์ €์žฅ Note right of C: ํ† ํฐ ์ฝ๊ธฐ C->>S: ํ† ํฐ๊ณผ ํ•จ๊ป˜ ์š”์ฒญ Note left of S: ํ† ํฐ ๊ฒ€์ฆ S->>C: ์‘๋‹ต

์ฐธ๊ณ ์ž๋ฃŒ

์ด ๋ฌธ์„œ๋ฅผ ์ธ์šฉํ•œ ๋ฌธ์„œ