Bibi's DevLog ๐Ÿค“๐ŸŽ

[JWT ๊ธฐ์ดˆ] JWT, TOKEN ํ† ํฐ ๋ฒ ์ด์Šค ๋กœ๊ทธ์ธ ๋ณธ๋ฌธ

๐Ÿ–ฅ BE ๋ฐฑ์—”๋“œ

[JWT ๊ธฐ์ดˆ] JWT, TOKEN ํ† ํฐ ๋ฒ ์ด์Šค ๋กœ๊ทธ์ธ

๋น„๋น„ bibi 2021. 6. 4. 00:23

JWT, TOKEN ํ† ํฐ ๋ฒ ์ด์Šค ๋กœ๊ทธ์ธ

์ถœ์ฒ˜ ๐Ÿ™‡โ€โ™‚๏ธ

https://www.youtube.com/watch?v=zC5dLbZMAW0

Token Based Auth (JWT)์— ๋Œ€ํ•œ ๋‚ด์šฉ์ด๋‹ค.

Session Based Auth

๋กœ๊ทธ์ธ

  • ํด๋ผ์ด์–ธํŠธ : ID, PW์™€ ํ•จ๊ป˜ request
  • ์„œ๋ฒ„ : ID,PW ํ™•์ธ ํ›„ ๋งž๋‹ค๋ฉด sessionID๋ฅผ ์ฟ ํ‚ค์— ๋„ฃ์–ด response
    • ์„œ๋ฒ„ ๋‚ด๋ถ€์—์„œ sessionId๋ฅผ ๊ด€๋ฆฌ

๋กœ๊ทธ์ธ ์ดํ›„

  • ํด๋ผ์ด์–ธํŠธ : ์š”์ฒญ์„ ํ•  ๋•Œ sessionID๋ฅผ ํ•จ๊ป˜ ๋ณด๋ƒ„
  • ์„œ๋ฒ„ : sessionID๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด/๋งž๋‹ค๋ฉด ๋กœ๊ทธ์ธ ์‹œ์—๋งŒ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์‘๋‹ต

Token Based Auth

์™œ ๋“ฑ์žฅํ–ˆ๋Š”๊ฐ€?

  • ์„ธ์…˜๊ธฐ๋ฐ˜ ์ธ์ฆ์œผ๋กœ๋Š” ์—ฌ๋Ÿฌ ์„œ๋น„์Šค, ์—ฌ๋Ÿฌ ์„œ๋ฒ„์˜ ์ธ์ฆ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ๊ฐ€ ๋„ˆ๋ฌด ๋ณต์žกํ•˜๊ธฐ ๋•Œ๋ฌธ

๋กœ๊ทธ์ธ

  • ํด๋ผ์ด์–ธํŠธ : ID, PW์™€ ํ•จ๊ป˜ request
  • ์„œ๋ฒ„ : ID, PW ํ™•์ธ ํ›„ ๋งž๋‹ค๋ฉด ํ† ํฐ์„ response
    • ์„œ๋ฒ„๊ฐ€ sessionID๋ฅผ ๊ด€๋ฆฌํ•˜์ง€ ์•Š์Œ

๋กœ๊ทธ์ธ ์ดํ›„

  • ํด๋ผ์ด์–ธํŠธ : ์š”์ฒญ ์‹œ ํ† ํฐ์„ ํ•จ๊ป˜ ๋ณด๋ƒ„
  • ์„œ๋ฒ„ : ํ† ํฐ์ด ์˜ฌ๋ฐ”๋ฅธ์ง€ ํ™•์ธ ํ›„ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ ์ ˆํ•œ ๊ถŒํ•œ์„ ๋ถ€์—ฌ

์žฅ์ 

  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋‹ค๋ฅธ ์„œ๋น„์Šค๋ฅผ ์ด์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค๋ฅธ ์„œ๋ฒ„์— ์š”์ฒญํ•  ๋•Œ์—๋„ ๊ฐ™์€ ํ† ํฐ๊ณผ ํ•จ๊ป˜ ์š”์ฒญํ•œ๋‹ค
  • ์„œ๋ฒ„๋Š” ํ† ํฐ์ด ์˜ฌ๋ฐ”๋ฅธ์ง€ ์•„๋‹Œ์ง€๋งŒ ํ™•์ธํ•˜๊ณ , ์˜ฌ๋ฐ”๋ฅด๋‹ค๋ฉด ๊ถŒํ•œ ๋ถ€์—ฌ
  • -> ์„ธ์…˜ ์ƒํƒœ session state๋ฅผ ๋งค๋ฒˆ ๊ด€๋ฆฌํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค. ํ† ํฐ๋งŒ ๋ณด๊ณ  ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•œ๋‹ค

JWT - Json Web Token

  • JWT๋Š” ํ† ํฐ ๊ธฐ๋ฐ˜ ์ธ์ฆ์˜ ๊ฐ€์žฅ ๋Œ€ํ‘œ์ ์ธ ๋ฐฉ์‹์ด๋‹ค.
  • jwt ๊ณต์‹ ํŽ˜์ด์ง€์—์„œ ์–ด๋–ป๊ฒŒ ์ธ์ฝ”๋”ฉ,๋””์ฝ”๋”ฉ๋˜๋Š”์ง€ ํ™•์ธ ๊ฐ€๋Šฅ

์ธ์ฝ”๋”ฉ

  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ (์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ›์€)ํ† ํฐ์„ ์„œ๋ฒ„์—๊ฒŒ ๋ณด๋‚ผ ๋•Œ์˜ ์ƒํƒœ. ์•”ํ˜ธํ™”๋˜์–ด ์žˆ๋‹ค
  • 3๋‹จ๊ณ„๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค - ํ—ค๋” header, ํŽ˜์ด๋กœ๋“œ payload, ์‹œ๊ทธ๋‹ˆ์ฒ˜ verify signature

ํ—ค๋” header

  • ์ธ์ฝ”๋”ฉํ•  ์•Œ๊ณ ๋ฆฌ์ฆ˜, ํ† ํฐ ํƒ€์ž… ์ •๋ณด๊ฐ€ ๋“ค์–ด์žˆ๋‹ค

ํŽ˜์ด๋กœ๋“œ(๋‚ด์šฉ) payload

  • sub, name, iat(์œ ํšจ๊ธฐ๊ฐ„?) ๊ฐ€ ๊ธฐ๋ณธ์œผ๋กœ ๋“ค์–ด ์žˆ์œผ๋‚˜ ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ์ •๋ณด๋กœ ํ‚ค,๊ฐ’์„ ์ง€์ • ๋ฐ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์˜ˆ๋ฅผ ๋“ค์–ด id, name, exp(๋งŒ๋ฃŒ์ผ์ž)

  • ์›ํ•˜๋Š” ์ •๋ณด๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ตœ์†Œํ•œ์˜ ์ •๋ณด๋งŒ ๋“ค์–ด์žˆ๋Š” ๊ฒŒ ์ข‹๋‹ค. (๋„คํŠธ์›Œํฌ๋กœ ์ „์†ก๋˜๋Š” ๊ฐ’์ด๋ฏ€๋กœ ๊ฐ€๋ฒผ์šธ์ˆ˜๋ก ์ข‹์Œ)

  • ํ† ํฐ์˜ ์œ ํšจ๊ธฐ๊ฐ„์€ ๋ช‡๋ถ„~1์‹œ๊ฐ„ ์ •๋„๋กœ ์งง์€ ํŽธ์ด๋‹ค.

์„œ๋ช…(์‹œ๊ทธ๋‹ˆ์ฒ˜) verify signature

  • ํ—ค๋”, ํŽ˜์ด๋กœ๋“œ, ์‹œํฌ๋ฆฟ ํ‚ค๊ฐ€ ํฌํ•จ๋œ๋‹ค.

  • ์‹œํฌ๋ฆฟ ํ‚ค๋ฅผ ์ง€์ •ํ•œ ํ›„์— ํŽ˜์ด๋กœ๋“œ/ํ—ค๋”๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฉด invalid signature๋ผ๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

  • ๋งŒ์•ฝ ์‹œํฌ๋ฆฟ ํ‚ค๊ฐ€ ์œ ์ถœ๋œ๋‹ค๋ฉด ์ƒˆ๋กœ์šด ์‹œํฌ๋ฆฟ ํ‚ค ๊ฐ’์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. (์ด์ „ ์‹œํฌ๋ฆฟ ํ‚ค๋กœ ๋ฐœ๊ธ‰๋œ ํ† ํฐ์€ ๋ฌดํšจํ™”๋œ๋‹ค)

โ— ํ—ค๋”, ํŽ˜์ด๋กœ๋“œ๋Š” encryption(์•”ํ˜ธํ™”)๊ฐ€ ๋˜์ง€ ์•Š๋Š”๋‹ค. ์ค‘์š”ํ•œ ์ •๋ณด๋Š” ๋„ฃ์ง€ ๋ง์•„์•ผ ํ•œ๋‹ค.

์ด์ œ ์•„๋ž˜ ๋งํฌ๋ฅผ ์ฐธ์กฐํ•ด ์‹ค์ œ ๊ตฌํ˜„์„ ํ•ด์•ผ๊ฒ ๋‹ค..!!

https://ocblog.tistory.com/56