๐Ÿ“… 2024. 05. 10 102์ผ์ฐจ


JWT(JSON Web Token)

  • ์„ ํƒ์  ์•”ํ˜ธํ™”๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๋งŒ๋“ฌ
  • ํ† ํฐ์€ ๋น„๊ณต๊ฐœ ์‹œํฌ๋ฆฟ ํ‚ค ๋˜๋Š” ๊ณต๊ฐœ/๋น„๊ณต๊ฐœ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋ช…๋œ๋‹ค.

์ธ์ฆ

  • ์‹ ์›ํ™•์ธ
  • ์š”์ฒญ์„ ํšŸ์ˆ˜๋กœ๋งŒ ๋ฐ›์œผ๋ฉด ๋ˆ„๊ตฐ์ง€ ์‹ ์›ํ™•์ธ์ด ์–ด๋ ต๋‹ค
    • ์ด๊ฑธ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋„์ž…๋œ ๊ฒƒ์ด ์ฟ ํ‚ค

์ฟ ํ‚ค

  • ๊ตฌ๋ถ„์„ ํ•˜๊ธฐ ์œ„ํ•จ
  • ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ์˜ ๊ณต์œ ๋ฐ์ดํ„ฐ
  • ๊ฐ ๋ธŒ๋ผ์šฐ์ €์˜ ๊ณ ์œ ๋ฒˆํ˜ธ๋ฅผ ์ค€๋‹ค

์ฟ ํ‚ค์„ธ์…˜


ํด๋ผ์ด์–ธํŠธ : ๋ธŒ๋ผ์šฐ์ €
์„œ๋ฒ„: ์›น์„œ๋ฒ„

์•„์ดํฐ ์•ฑ / ์›น ์„œ๋ฒ„
์•ˆ๋“œ๋กœ์ด๋“œ ์•ฑ / ์›น ์„œ๋ฒ„

2008๋…„๋„ ์•„์ดํฐ/์•ˆ๋“œ๋กœ์ด๋“œ๋Š” ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์•„๋‹ˆ๋ผ์„œ ์ฟ ํ‚ค๊ฐ€ ์—†์Œ

์ฟ ํ‚ค๊ฐ€ ์—†์–ด

  • ์„ธ์…˜ํ‚ค๋ฅผ ์ €์žฅ ํ•  ์ˆ˜ ์—†์–ด
  • ๋กœ๊ทธ์ธ์„ ์œ ์ง€ํ•  ์ˆ˜ ์—†์–ด

์•ฑ
์•ฑ์—์„œ ์„œ๋ฒ„๋กœ ๊ทธ๋ƒฅ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๋ฉด ๋ˆ„๊ตฐ์ง€ ๋ชจ๋ฅด๋‹ˆ๊นŒ id๋ž‘ pw๋ฅผ ํ•œ๋ฌถ์œผ๋กœ ๊ฐ™์ด ๋ณด๋ƒ„

๊ฒฐ๋ก 

์›น
์ตœ์ดˆ ์š”์ฒญ : ID / PW
๊ทธ ๋‹ค์Œ ์š”์ฒญ : ์ œ๋ชฉ / ๋‚ด์šฉ
๊ทธ ๋‹ค์Œ ์š”์ฒญ : ์ œ๋ชฉ / ๋‚ด์šฉ

์•ฑ
์ตœ์ดˆ ์š”์ฒญ : ID / PW
๊ทธ ๋‹ค์Œ ์š”์ฒญ : ID / PW / ์ œ๋ชฉ / ๋‚ด์šฉ
๊ทธ ๋‹ค์Œ ์š”์ฒญ : ID / PW / ์ œ๋ชฉ / ๋‚ด์šฉ

ID/PW๋Š” ์•ฑ ์ธก์—์„œ ๊ธฐ์–ตํ•ด๋…ผ๋‹ค

๊ณ„์ •

ID / PW
ํ† ํฐ์€ ๋งŒ๋ฃŒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ๊ณ„์ •

  • test1 / 1234
  • 12345623453659837598235987

ํ† ํฐ์ด ๋ฐœ๋ช…๋˜๊ธฐ ์ „,

์•ฑ์‹œ์ž‘

  • ์•„์ด๋”” ๋น„๋ฒˆ์„ ์ž…๋ ฅ
  • ์•ฑ์ด ์„œ๋ฒ„์—๊ฒŒ ํ•ด๋‹น ์•„ใ…ฃ์ด๋”” ๋น„๋ฒˆ์ด ์œ ํšจํ•œ์ง€ ๋ฌผ์–ด๋ด„
  • ์œ ํšจํ•˜๋ฉด ์•ฑ์€ ๊ทธ ์•„์ด๋”” / ๋น„๋ฒˆ์„ ์˜๊ตฌ ์ €์žฅํ•œ๋‹ค.
  • ๊ธ€์“ฐ๊ธฐ -> HTTP POST title, body, di ,pw
  • ์ข‹์•„์š” -> HTTP POST aritlceId, id, pw

ํ† ํฐ์ด ๋ฐœ๋ช…๋˜๊ณ  ๋‚˜์„œ,

์•ฑ์‹œ์ž‘

  • ์•„์ด๋”” ๋น„๋ฒˆ์„ ์ž…๋ ฅ
  • ์•ฑ์ด ์„œ๋ฒ„์—๊ฒŒ ํ•ด๋‹น ์•„ใ…ฃ์ด๋”” ๋น„๋ฒˆ์ด ์œ ํšจํ•œ์ง€ ๋ฌผ์–ด๋ด„
  • ์œ ์š”ํ•˜๋ฉด ์„œ๋ฒ„๊ฐ€ ํ† ํฐ์„ ๋ฐœ๊ธ‰ํ•ด์ค€๋‹ค
  • ํ† ํฐ์œผ๋กœ id/pw ์—ญํ• ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค
  • ์œ ํšจํ•˜๋ฉด ์•ฑ์€ ๊ทธ ์•„์ด๋”” / ๋น„๋ฒˆ์„ ์˜๊ตฌ ์ €์žฅํ•œ๋‹ค.
  • ๊ธ€์“ฐ๊ธฐ -> HTTP POST title, body, id ,pw
  • ์ข‹์•„์š” -> HTTP POST aritlceId, id, pw

๊ตณ์ด ์™œ ์ด๋ ‡๊ฒŒ ํ•˜์ง€?

id/pw -> ๋ˆ„๊ตฐ์ง€ ์‹ ์›ํ™•์ธ
ํ† ํฐ -> ๋ˆ„๊ตฐ์ง€ ์‹ ์›ํ™•์ธ

ํ•ดํ‚น ๋‹นํ•˜๋ฉด, id/pw๋„ ํ„ธ๋ฆฌ์ง€๋งŒ ํ† ํฐ๋„ ํ„ธ๋ฆผ

  • id/pw ํ„ธ๋ฆฌ๋ฉด, ์•„์ด๋””๋Š” ๋ชป๋ฐ”๊พธ์ง€๋งŒ ์‚ฌ์ดํŠธ ๋กœ๊ทธ์ธ ํ›„ ๋น„๋ฒˆ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Œ
  • ํ† ํฐ์ด ํ„ธ๋ฆฌ๋ฉด, ์ „ ๊ธฐ๊ธฐ์—์„œ ๋กœ๊ทธ์•„์›ƒ

DB์˜ member ํ…Œ์ด๋ธ”์—

  • id
  • createDate
  • modifyDate
  • loginId
  • loginPw
  • name
  • email
  • phoneNum
    .
    .
  • token

ํ† ํฐ์„ ์จ์„œ ์ข‹์€ ์  2๊ฐ€์ง€

  • ์ฐ์ฐํ•˜์ง€ ์•Š์Œ
  • ๋น„๋ฒˆ ๋ฐ”๊พธ๊ธฐ ๊ท€์ฐฎ

ํ† ํฐ์„ ์“ฐ๋ฉด์„œ ๋ถˆ๋งŒ์ด ์ƒ๊น€

  • ์‹ ์›ํ™•์ธ์„ ํ•  ๋•Œ DB SELECT๋ฅผ ํ•ด์•ผํ•œ๋‹ค.
  • ๊ธ€์„ ์“ธ๋•Œ๋Š” ์ผ๋‹จ ์œ ํšจํ•œ ํ† ํฐ์ธ์ง€ ๊ฒ€์‚ฌํ•ด์•ผํ•˜๋‹ˆ,
SELECT * FROM member 
WHERE token = '123412341234';

์„ธ์…˜๊ฐ’์ด ์žˆ๋Š”์ง€ ์—†๋Š”์ง€

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

  • ๋กœ๊ทธ์ธ ์—ฌ๋ถ€๋ฅผ SELECT๋ฅผ ํ†ตํ•ด ์•Œ์•„์•ผ ํ•จ

๊ทธ๋Ÿฌ๋‚˜ 100% ์ •๋‹ต์€ ์•„๋‹˜.

์„ธ์…˜

  • DB ์ €์žฅ์†Œ๋กœ ์“ฐ๋Š” ์‚ฌ๋žŒ๋„ ์žˆ๊ณ 
    ์บ์‰ฌ๋„ ์žˆ์Œ

๋ธŒ๋ผ์šฐ์ € - ๋กœ๊ทธ์ธ ์—ฌ๋ถ€๋ฅผ DB์กฐํšŒ ์—†์ด ํ•˜๊ณ ์‹ถ์€๋ฐ
ํ† ํฐ์„ ์‚ฌ์šฉํ•˜๋ฉด DB์‚ฌ์šฉ์„ ์•ˆํ•  ์ˆ˜๊ฐ€ ์—†์Œ
๋‚ด๊ฐ€ ๊ธ€์„ 1000๋ฒˆ ์“ฐ๋ฉด DB์—์„œ select๋ฅผ 1000๋ฒˆ ํ•ด์•ผํ•˜๋Š”๊ฑฐ์ง€.

SELECT * FROM member 
WHERE token = '123412341234';

์—ฌ๊ธฐ ํ† ํฐ ๊ฐ’์— ์˜๋ฏธ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์—†๋‚˜?
์—ฌ๊ธฐ์„œ ๋‚˜์˜จ๊ฒŒ ๋ฐ”๋กœ JWT


JWT

  • ์œ ํšจ์„ฑ ์ฒดํฌ, CPU ์—ฐ์‚ฐ
  • ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด์„ ์ˆ˜ ์žˆ๋Š” ํ† ํฐ

์˜›๋‚ ํ† ํฐ

  • 12312312341212312312312

JWT

  • {"id" :1, "name": "ํ™๊ธธ๋™", "age": 22}
    -> eyJpZCIgOjEsICJuYW1lIjogIu2Zjeq4uOuPmSIsICJhZ2UiOiAyMn0=

https://www.base64decode.org/
์—ฌ๊ธฐ์„œ encode๋ฅผ ํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ํ† ํฐ์ด ๋ฐœํ–‰์ด ๋œ๋‹ค.

-> Hash(์‹œํฌ๋ฆฟํ‚ค)
-> JWT

=== ์˜›๋‚  ํ† ํฐ ๋ฐฉ์‹ ===
๋ฒˆํ˜ธ: 1
์•„์ด๋”” : abcd
๋น„๋ฒˆ : 1234
์ด๋ฆ„ : ํ™๊ธธ๋™
๋‚˜์ด : 22
ํ† ํฐ : 11112312314432523

SELECT * FROM member
WHERE token = '11112312314432523';

=== ์ƒˆ ํ† ํฐ ๋ฐฉ์‹ ===
"๋ฒˆํ˜ธ": 1
"์•„์ด๋””" : "abcd"
"๋น„๋ฒˆ" : 1234
"์ด๋ฆ„" : "ํ™๊ธธ๋™"
"๋‚˜์ด" : 22
"ํ† ํฐ" : "11112312314432523"

WHERE token = '11112312314432523';
์ƒˆ ํ† ํฐ๋ฐฉ์‹์€ ์ด๋Ÿฐ๊ฑฐ ํ•˜์ง€ ์•Š์•„๋„ ๋จ

https://www.base64decode.org/
์—ฌ๊ธฐ์„œ ํ† ํฐ์„ decode๋ฅผ ํ•˜๋ฉด

eyJpZCIgOjEsICJuYW1lIjogIu2Zjeq4uOuPmSIsICJhZ2UiOiAyMn0=
{"id" :1, "name": "ํ™๊ธธ๋™", "age": 22}

์ •๋ณด๊ฐ€ ๋‚˜์˜จ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋‹จ์ˆœ ๋ณ€ํ™˜์„ ํ•œ๊ฑฐ๋ผ์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์‹ ๋ขฐํ•  ์ˆ˜ ์—†๋Œ€.

  • ์‹œํฌ๋ฆฟํ‚ค -> decode ->

๋ณตํ˜ธํ™”

JWT
JWT ๋งŒ๋“ค๋•Œ ์œ ํšจ๊ธฐ๊ฐ„ ์„ค๋ฉ

  • 5๋ถ„์งœ๋ฆฌ
  • ์ •๋ง ๋‚ด๊ฐ€ ๋งŒ๋“ค์—ˆ๋‚˜? ์ฒดํฌ

member

  • token
  • ์‹œํฌ๋ฆฟํ‚ค : ์ด ํ† ํฐ์ด ์ •๋ง ๋‚ด๊ฐ€ ๋งŒ๋“ค์—ˆ๋Š”์ง€?
  • ํ† ํฐ์„ DB

0๊ฐœ์˜ ๋Œ“๊ธ€