๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

WEB

[ ์‚ฌ์šฉ์ž ์ธ์ฆ / ์ธ๊ฐ€ ] Session & Cookie VS Token

 

Session๊ณผ Token์€ ๋ฌด์—‡์ผ๊นŒ?

 

 

๐Ÿ‘‰   ์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์ธ๋˜์–ด์žˆ๋Š” ์ƒํƒœ๋ฅผ ์„œ๋ฒ„๊ฐ€ ์ธ์ง€ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๋ฐฉ๋ฒ•๋“ค ์ค‘ ํ•˜๋‚˜.

 

 

 

์ธํ„ฐ๋„ท์„ ์ด์šฉํ•  ๋•Œ ์“ฐ๋Š” HTTP๋Š” Stateless(์ƒํƒœ๊ฐ€ ์—†๋Š”, ๋ฌด์ƒํƒœ์˜) ํ”„๋กœํ† ์ฝœ์ด๋ผ,

๋ชจ๋“  ์š”์ฒญ์ด ์ด์ „ ์š”์ฒญ๊ณผ ๋…๋ฆฝ์ ์œผ๋กœ ๋‹ค๋ค„์ง€๊ธฐ ๋•Œ๋ฌธ์— ์š”์ฒญ๋ผ๋ฆฌ ์„œ๋กœ ์—ฐ๊ฒฐ๋˜์ง€ ์•Š๋Š”๋‹ค.

์ด ๋ง์€ ํ•˜๋‚˜์˜ ์š”์ฒญ์ด ๋๋‚˜๋ฉด ์„œ๋ฒ„๋Š” ์ด์ „ ์š”์ฒญ์— ๋Œ€ํ•œ ์‚ฌ์šฉ์ž๊ฐ€ ๋ˆ„๊ตฌ์ธ์ง€ ์žŠ์–ด๋ฒ„๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์—

์‚ฌ์šฉ์ž๊ฐ€ ์ด๋ฏธ ๋กœ๊ทธ์ธ๋œ ์ƒํƒœ์—ฌ๋„ ๋กœ๊ทธ์ธ์ด ํ•„์š”ํ•œ ์„œ๋น„์Šค or ํ™”๋ฉด์— ์ ‘๊ทผํ•˜๋ ค๋ฉด

์ƒˆ๋กœ์šด ์š”์ฒญ์„ ํ•  ๋•Œ๋งˆ๋‹ค ์‚ฌ์šฉ์ž๋Š” ๊ณ„์† ๋กœ๊ทธ์ธ์„ ๋ฐ˜๋ณตํ•˜๋ฉฐ ์„œ๋ฒ„์—๊ฒŒ ์ž์‹ ์ด ๋ˆ„๊ตฌ์ธ์ง€

์•Œ๋ ค์ฃผ์–ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

 

๊ทธ๋ž˜์„œ ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ์•ˆ๋“ค ์ค‘์— ํ•˜๋‚˜์ธ

session(์„ธ์…˜)๊ณผ token(ํ† ํฐ)์„ ์ด์šฉํ•œ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋ ค๊ณ  ํ•œ๋‹ค.

 

 

 


 

 

 

์„ธ์…˜๊ณผ ํ† ํฐ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ธฐ ์ „์— ๋จผ์ € Authentication(์ธ์ฆ)๊ณผ Authorization(์ธ๊ฐ€, ํ—ˆ๊ฐ€)์— ๋Œ€ํ•ด ๊ฐ„๋‹จํžˆ ์•Œ์•„๋ณด์ž.

 

 

 

๐Ÿ‘‰  Authentication(์ธ์ฆ)

์ธ์ฆ์€ ์‰ฝ๊ฒŒ, ๋กœ๊ทธ์ธ ํ•˜๋Š” ๊ณผ์ •์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

ํ•ด๋‹น ์„œ๋น„์Šค์˜ ์‚ฌ์šฉ์ž๊ฐ€ ๋งž๋Š”์ง€ ์‹ ์›์„ ํ™•์ธํ•˜๋Š” ๊ณผ์ •์ด๋‹ค.

 

 

๐Ÿ‘‰  Authorization(์ธ๊ฐ€)

์ธ๊ฐ€๋Š” ์ธ์ฆ(๋กœ๊ทธ์ธ)๋œ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ์‚ฌ์šฉ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๋Š” ์ž‘์—…์œผ๋กœ,

์•ก์„ธ์Šค๊ฐ€ ํ—ˆ์šฉ๋œ ๋ฐ์ดํ„ฐ ๋ฐ ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋กœ ํ•  ์ˆ˜ ์žˆ๋Š” ์ž‘์—…๋“ค์„ ์ง€์ •ํ•œ๋‹ค.

 

๐Ÿงš๐Ÿป  ๋‚˜์˜ ์ƒ์ƒ๋ ฅ์„ ์ด๋™์›ํ•œ ์˜ˆ์‹œ ์ƒํ™ฉ ๐Ÿงš๐Ÿป

๋ฐ”๋‹ค ์œ„์— ๋– ์žˆ๋Š” ์ดˆํ˜ธํ™” ํฌ๋ฃจ์ฆˆ๋ผ๊ณ  ์ƒ์ƒํ•ด๋ณด๋ฉด ๐Ÿšข
ํฌ๋ฃจ์ฆˆ์— ํƒ‘์Šนํ•œ ํƒ‘์Šน๊ฐ๋“ค์€ < ํฌ๋ฃจ์ฆˆ ์Šน์„ ๊ถŒ > ์„ ํ†ตํ•ด ํƒ‘์Šน๊ฐ์ž„์„ Authentication(์ธ์ฆ) ๋ฐ›์€ ์‚ฌ๋žŒ๋“ค์ด๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ์ด ํฌ๋ฃจ์ฆˆ ์•ˆ์—๋Š” ์•„์ฃผ ์œ ๋ช…ํ•˜๊ณ  ๋ฉ‹์ง„ ์ดˆํ˜ธํ™” ๋Ÿญ์…”๋ฆฌ ๋ผ์šด์ง€๊ฐ€ ์žˆ๋Š”๋ฐ,
์ด ๋ผ์šด์ง€๋Š” ๋ชจ๋“  ํƒ‘์Šน๊ฐ์ด ์ด์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ณณ์ด ์•„๋‹ˆ๋ผ 100% ์˜ˆ์•ฝ์ œ๋กœ๋งŒ ์šด์˜๋˜๋Š” ๋ผ์šด์ง€์˜€๋‹ค.
๊ทธ๋ž˜์„œ ๋ชจ๋“  ํƒ‘์Šน๊ฐ์ด ์ด์šฉํ•  ์ˆ˜๋Š” ์—†๊ณ ,  ๋ผ์šด์ง€ ์ž…๊ตฌ์— ์žˆ๋Š” ์˜ˆ์•ฝ์ž ๋ช…๋‹จ์—์„œ
< ํ•ด๋‹น ํƒ‘์Šน๊ฐ์˜ ์ด๋ฆ„์ด ์˜ˆ์•ฝ์ž ๋ช…๋‹จ์— ์žˆ๋Š”์ง€ ํ™•์ธ - Authorization(์ธ๊ฐ€) > ์˜
์ˆœ์„œ๋ฅผ ๊ฑฐ์ณ์•ผ๋งŒ, ๋งˆ์นจ๋‚ด! ๋ผ์šด์ง€์— ์ž…์žฅ์ด ๊ฐ€๋Šฅํ•œ ๊ฒƒ์ด๋‹ค.

 

์œ„์— ์ ์€ ์˜ˆ์‹œ๊ฐ€ ์ ์ ˆํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์ง€๋งŒ....๐Ÿ˜‚ 

์ƒํ™ฉ์„ ์ •๋ฆฌํ•ด ๋ณด๋ฉด,

 

 

๐Ÿ’  ํƒ‘์Šน๊ถŒ์œผ๋กœ ํฌ๋ฃจ์ฆˆ์— ์Šน์„ ํ•˜๋Š” ํ–‰์œ„ = ๋กœ๊ทธ์ธ = Authentication(์ธ์ฆ)

๐Ÿ‘  ํฌ๋ฃจ์ฆˆ ํƒ‘์Šน๊ฐ๋กœ๊ทธ์ธ๋œ ์‚ฌ์šฉ์ž

๐Ÿซ’  ๊ฐœ์ธ ๊ฐ์‹ค = ์ธ๊ฐ€๋ฐ›์€ ์‚ฌ์šฉ์ž๋งŒ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ํ™”๋ฉด ๋ฐ ์ •๋ณด๋“ค (๋‚˜์˜ ์ •๋ณด, ๊ด€๋ฆฌ์ž ๊ถŒํ•œ์œผ๋กœ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๋“ค ๋“ฑ๋“ฑ)

๐Ÿซ  ๊ฐœ์ธ ๊ฐ์‹ค ์ด์šฉ๊ฐ = ์š”์ฒญ์— ๋Œ€ํ•œ ์ ‘๊ทผ ๊ถŒํ•œ์„ Authorization(์ธ๊ฐ€) ๋ฐ›์€ ์‚ฌ์šฉ์ž.

 

 

์œผ๋กœ ์ดํ•ดํ•˜๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค. ๐Ÿ˜„๐Ÿ˜„

 

 

 

 


 

 

 

1. Session & Session Cookie

 

์„ธ์…˜์€ ์–ด๋–ค ์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์ธ์ด ๋˜์–ด์žˆ๋‹ค๋Š” ๊ฒƒ์„ <session id> ๋ฅผ ํ†ตํ•ด ์„œ๋ฒ„๊ฐ€ ์ธ์ง€ํ•˜๊ณ ์žˆ๋Š” ์ƒํƒœ์ด๋‹ค.

์ „์ฒด์ ์€ flow๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

 

 

์ถœ์ฒ˜:https://hackernoon.com/using-session-cookies-vs-jwt-for-authentication-sd2v3vci

 

1) ์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์ธ์— ์„ฑ๊ณตํ•˜๋ฉด ์„œ๋ฒ„๊ฐ€ ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•œ ์„ธ์…˜์„ ๋งŒ๋“ค๊ณ , ์„ธ์…˜ ๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋น„์Šค ํ™˜๊ฒฝ์— ๋”ฐ๋ผ

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

2) ์„œ๋ฒ„์—์„œ ํด๋ผ์ด์–ธํŠธ(์‚ฌ์šฉ์ž ์ธก)๋กœ ์„ธ์…˜ id๊ฐ€ ๋‹ด๊ธด ์ฟ ํ‚ค๋ฅผ ๋ณด๋‚ด๊ณ (Set-cookie),  ์ด ์„ธ์…˜ id๋Š”

     ์‚ฌ์šฉ์ž๊ฐ€ ์ธ์ฆ์ด ํ•„์š”ํ•œ ํ™œ๋™์„ ํ•˜๋Š” ๋™์•ˆ ํด๋ผ์ด์–ธํŠธ ์ธก ๋ธŒ๋ผ์šฐ์ €์— ์žˆ๋Š” ์ฟ ํ‚ค์— ์ €์žฅ๋œ๋‹ค. 

3)  ํด๋ผ์ด์–ธํŠธ๋Š” ํ•ด๋‹น ์‚ฌ์ดํŠธ์— ๋Œ€ํ•œ ์‚ฌ์šฉ์ž์˜ ์ธ๊ฐ€๊ฐ€ ํ•„์š”ํ•œ ๋ชจ๋“  ์š”์ฒญ์— ์„ธ์…˜ id๋ฅผ ์ฟ ํ‚ค์— ๋‹ด์•„ ์„œ๋ฒ„์— ์ „์†กํ•œ๋‹ค.

4) ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ณด๋‚ธ ์„ธ์…˜ id์™€ ์„œ๋ฒ„ ์ธก์— ์ €์žฅ๋œ ์„ธ์…˜ id๋ฅผ ๋น„๊ตํ•˜์—ฌ verification(์œ ํšจ์„ฑ ๊ฒ€์ฆ) ๋ฐ

     Authorization(์ธ๊ฐ€)์„ ํ†ตํ•ด ํ•ด๋‹น ์š”์ฒญ์— ๋Œ€ํ•œ Response๋ฅผ ํด๋ผ์ด์–ธํŠธ ์ธก์— ๋ณด๋‚ธ๋‹ค.

5) ์ดํ›„ ์„œ๋ฒ„๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ฒ˜์Œ ๋กœ๊ทธ์ธํ•  ๋•Œ ์ €์žฅ๋œ ์„ธ์…˜ id๋กœ ์ฟ ํ‚ค์— ๋‹ด๊ธด ์„ธ์…˜ id๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
    ์‚ฌ์šฉ์ž๊ฐ€ ์›น์‚ฌ์ดํŠธ์—์„œ ๋กœ๊ทธ์•„์›ƒํ•˜๋ฉด ํ•ด๋‹น ์„ธ์…˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์„œ๋ฒ„ ์ธก์—์„œ ์‚ญ์ œ๋œ๋‹ค.

 

 

 

session & cookie ๋ฐฉ์‹์„ ์ด์šฉํ•˜๊ฒŒ ๋˜๋ฉด ์ด๋ ‡๊ฒŒ ์ธ๊ฐ€๊ฐ€ ํ•„์š”ํ•œ ์š”์ฒญ์ด ์žˆ์„ ๋•Œ๋งˆ๋‹ค ์ฟ ํ‚ค์— ๋‹ด๊ธด ์„ธ์…˜ id๋ฅผ ๋ณด๊ณ ,

์„œ๋ฒ„์ธก์— ์ €์žฅ๋œ ์„ธ์…˜ id์™€ ๋น„๊ต ๋ฐ ํƒ์ƒ‰์„ ํ•ด์•ผ ํ•˜๊ณ ,  ์‚ฌ์šฉ์ž๊ฐ€ ๋Š˜์–ด๋‚จ์— ๋”ฐ๋ผ ์„ธ์…˜ Id๋ฅผ ์ €์žฅํ•  ๊ณต๊ฐ„๋„ ๋” ํ™•๋ณดํ•ด์•ผ ํ•œ๋‹ค.

ํ•˜์ง€๋งŒ ์‚ฌ์šฉ์ž์˜ ๋กœ๊ทธ์ธ ์ƒํƒœ๋ฅผ ๋ชจ๋‘ ์ €์žฅํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—Stateful์˜ ์žฅ์ ์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ,

๊ฐ•์ œ ๋กœ๊ทธ์•„์›ƒ( ๊ทธ๋ƒฅ ์„ธ์…˜์„ ์‚ญ์ œํ•˜๋ฉด ๋œ๋‹ค. ),  ์ ‘์† ์ธ์› ์ œํ•œ( ๋„ทํ”Œ๋ฆญ์Šค ), ๋กœ๊ทธ์ธ๋œ ๋ชจ๋“  ๋””๋ฐ”์ด์Šค ์ •๋ณด ํ™•์ธ ๋“ฑ๋“ฑ 

๋กœ๊ทธ์ธ๊ณผ ๊ด€๋ จ๋œ ๋‹ค๋ฐฉ๋ฉด์œผ๋กœ ํ™œ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 

 

 

Cookie ๋ž€?

 Cookie(์ฟ ํ‚ค)๋ž€ ์›น ์‚ฌ์ดํŠธ์— ์ ‘์†ํ•  ๋•Œ ์„œ๋ฒ„์— ์˜ํ•ด ์‚ฌ์šฉ์ž์˜ ๋ธŒ๋ผ์šฐ์ €์— ์ €์žฅ๋˜๋Š” ์ •๋ณด๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
์‚ฌ์šฉ์ž๋ฅผ ์‹๋ณ„ํ•˜๊ณ , ์„ธ์…˜์„ ์œ ์ง€ํ•˜๋Š” ๋ฐฉ์‹์ด๋ฉฐ, ์›น ์‚ฌ์ดํŠธ๋Š” ์ €์žฅ๋œ ์‚ฌ์šฉ์ž์˜ ์ •๋ณด๋ฅผ
์‚ฌ์šฉ์ž ์ธก ๋ธŒ๋ผ์šฐ์ €์— ๋‚จ๊ฒจ, ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ์žฌ์‚ฌ์šฉํ•˜๋ฉฐ ๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ง€์›ํ•œ๋‹ค.
๋‹ค๋งŒ ์‚ฌ์šฉ์ž์˜ ์ •๋ณด๊ฐ€ ์ปดํ“จํ„ฐ์— ๋‚จ๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์ƒํ™œ ์นจํ•ด ๋ฐ ๋ณด์•ˆ ์ด์Šˆ๋“ค์ด ์žˆ๋‹ค.

์ฟ ํ‚ค๋Š” Key=value ํ˜•ํƒœ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.
ํƒ€์ž…์€ String์ด๊ณ , ๊ณต๊ฐ„ ์ œ์•ฝ์ด ์žˆ์–ด์„œ 4KB ์ด์ƒ ์ €์žฅ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

Set-Cookie: <cookie-name>=<cookie-value>โ€‹

 

โ– ์ฟ ํ‚ค๋Š” ์œ ํšจ๊ธฐ๊ฐ„์ด ์žˆ๊ณ , ์„œ๋ฒ„๊ฐ€ ์ •ํ•œ ๊ธฐ๊ฐ„์— ๋”ฐ๋ผ ์œ ํšจํ•˜๋‹ค.
โ– ์ฟ ํ‚ค๋Š” ์ธ์ฆ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ๋‹ค์–‘ํ•œ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค.
       1) ์„ธ์…˜ ๊ด€๋ฆฌ : ์„œ๋ฒ„์— ์ €์žฅํ•ด์•ผ ํ•  ๋กœ๊ทธ์ธ, ์žฅ๋ฐ”๊ตฌ๋‹ˆ, ๊ฒŒ์ž„ ์Šค์ฝ”์–ด ๋“ฑ์˜ ์ •๋ณด ๊ด€๋ฆฌ.
       2) ๊ฐœ์ธํ™” : ์‚ฌ์šฉ์ž ์„ ํ˜ธ, ํ…Œ๋งˆ ๋“ฑ์˜ ์„ธํŒ….
       3) ํŠธ๋ž˜ํ‚น : ์‚ฌ์šฉ์ž ํ–‰๋™์„ ๊ธฐ๋กํ•˜๊ณ  ๋ถ„์„ํ•˜๋Š” ์šฉ๋„.
โ– ์„ธ์…˜ ์ฟ ํ‚ค๋Š” ํ˜„์žฌ ์„ธ์…˜์ด ๋๋‚  ๋•Œ ์‚ญ์ œ๊ฐ€ ๋œ๋‹ค. ๋ธŒ๋ผ์šฐ์ €๋Š” "ํ˜„์žฌ ์„ธ์…˜"์ด ๋๋‚˜๋Š” ์‹œ์ ์„ ์ •์˜ํ•œ๋‹ค.
     ์–ด๋–ค ๋ธŒ๋ผ์šฐ์ €๋“ค์€ ์žฌ์‹œ์ž‘ํ•  ๋•Œ ์„ธ์…˜์„ ๋ณต์›ํ•ด์„œ ์„ธ์…˜ ์ฟ ํ‚ค๊ฐ€ ๋ฌด๊ธฐํ•œ ์กด์žฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.
โ– ์ง€์† ์ฟ ํ‚ค๋Š” Expires ๋˜๋Š” Max-Age ๋ผ๋Š” ์†์„ฑ์— ๋ช…์‹œ๋œ ๋‚ ์งœ์— ์‚ญ์ œ๊ฐ€ ๋œ๋‹ค.
โ– ์ฟ ํ‚ค๋Š” ๋ธŒ๋ผ์šฐ์ €์—๋งŒ ์žˆ๋‹ค. ๐Ÿ‘‰  Native App์—์„œ ์‚ฌ์šฉ ๋ถˆ๊ฐ€.
โ– ๋„๋ฉ”์ธ๊ณผ ํŒจ์Šค ๋””๋ ‰ํ‹ฐ๋ธŒ๋Š” ์ฟ ํ‚ค์˜ ์Šค์ฝ”ํ”„๋ฅผ ์ •์˜ํ•œ๋‹ค.(์–ด๋–ค URL๋กœ ์ฟ ํ‚ค๋ฅผ ๋ณด๋‚ด์•ผ ํ•˜๋Š”์ง€) 

์ฟ ํ‚ค์— ๋Œ€ํ•ด ๋” ์•Œ์•„๋ณด๊ธฐ

 

 

 

 

 


 

 

 

 

2. JWT(Json Web Token)

JWT๋Š” ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํ† ํฐ์œผ๋กœ, ์ด ์ธ์ฆ ๋ฐฉ์‹์€ ์‚ฌ์ธ(Signature)๋œ ํ† ํฐ์„ ํ†ตํ•ด

ํ•ด๋‹น ํ† ํฐ์ด ์œ ํšจํ•œ์ง€ ๊ฒ€์ฆํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณ„๋„์˜ DB ์—†์ด ์ธ์ฆ ๋ฐ ์ธ๊ฐ€๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. 

ํ† ํฐ ๊ธฐ๋ฐ˜ ์ธ์ฆ ๋ฐฉ์‹๊ณผ ์„ธ์…˜ ๊ธฐ๋ฐ˜ ์ธ์ฆ ๋ฐฉ์‹์˜ ๊ฐ€์žฅ ํฐ ์ฐจ์ด์ ์€ ์‚ฌ์šฉ์ž์˜ ์ •๋ณด๋ฅผ ์„œ๋ฒ„ ์ธก์— ์ €์žฅํ•˜๋Š”์ง€์˜ ์—ฌ๋ถ€์ด๋‹ค.

 

 

xxxxx.yyyyy.zzzzz 

JWT๋Š” ์ด๋ ‡๊ฒŒ ์ (.) ๊ตฌ๋ถ„์ž๋กœ ์—ฐ๊ฒฐ๋ผ ์žˆ๋Š” 3๊ฐ€์ง€์˜ ๋ถ€๋ถ„์œผ๋กœ ๊ตฌ์„ฑ๋œ ๋ฌธ์ž์—ด์ด๋‹ค.

 

 

JWT์˜ Encoded ์ƒ๊น€์ƒˆ - ์ถœ์ฒ˜ jwt.io

 

 

1. ๋นจ๊ฐ„ ๊ธ€์”จ ๋ถ€๋ถ„์€ Header

2. ๋ณด๋ผ์ƒ‰ ๊ธ€์”จ ๋ถ€๋ถ„์€ Payload

3. ํ•˜๋Š˜์ƒ‰ ๊ธ€์”จ ๋ถ€๋ถ„์€ Signature

 

 

 

 

JWT์˜ Decoded ์ƒ๊น€์ƒˆ - ์ถœ์ฒ˜ jwt.io

 

 

Header ๋ถ€๋ถ„์„ ๋””์ฝ”๋”ฉ ํ•˜๋ฉด 2๊ฐ€์ง€ ์ •๋ณด๊ฐ€ ๋‹ด๊ฒจ์žˆ๋Š”๋ฐ ํ† ํฐ์˜ ํƒ€์ž…(ํ† ํฐ์˜ ํƒ€์ž…์€ JWT ๊ณ ์ •๊ฐ’)๊ณผ

์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ •๋ณด๊ฐ€ ๋“ค์–ด์žˆ๋‹ค.

 

Payload ๋ถ€๋ถ„์€ ์‚ฌ์šฉ์ž์˜ ์ •๋ณด๋‚˜ ๋ฐ์ดํ„ฐ ์†์„ฑ ๋“ฑ์˜ claim์ด ๋“ค์–ด์žˆ๋Š”๋ฐ,

์„œ๋น„์Šค ์ธก์—์„œ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ด ํ† ํฐ์„ ํ†ตํ•ด ๊ณต๊ฐœํ•˜๊ธฐ ์›ํ•˜๋Š” ๋‚ด์šฉ์ด ๋“ค์–ด๊ฐ„๋‹ค.

๋ณดํ†ต ๋ˆ„๊ฐ€ ๋ˆ„๊ตฌ์—๊ฒŒ ๋ฐœ๊ธ‰ํ–ˆ๋Š”์ง€, ํ† ํฐ์˜ ์œ ํšจ๊ธฐ๊ฐ„, ์‚ฌ์šฉ์ž ์ด๋ฆ„, role ๋“ฑ์„ Jsonํ˜•ํƒœ๋กœ ์›ํ•˜๋Š” ๋Œ€๋กœ ๋‹ด์„ ์ˆ˜ ์žˆ๋‹ค.

 

Signature๋Š” ์„œ๋ช… ๋ถ€๋ถ„์œผ๋กœ, Header + Payload + <์„œ๋ฒ„์— ๊ฐ์ถฐ๋‘” Secret Key> ์„

Header์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋„ฃ๊ณ  ๋Œ๋ฆฌ๋ฉด Signature(์„œ๋ช…) ๊ฐ’์ด ๋‚˜์˜จ๋‹ค.

 

 

 

 

 

์ถœ์ฒ˜:https://hackernoon.com/using-session-cookies-vs-jwt-for-authentication-sd2v3vci


1) ์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์ธ์— ์„ฑ๊ณตํ•˜๋ฉด ์„œ๋ฒ„์—์„œ๋Š” JWTํ˜•ํƒœ์˜ ์•”ํ˜ธํ™”๋œ ํ† ํฐ์„ ๋ฐœ๊ธ‰(์ƒ์„ฑ)ํ•œ๋‹ค. 

2) ์ƒ์„ฑ๋œ ํ† ํฐ(์•”ํ˜ธํ™”๋œ JWT)์„ ํด๋ผ์ด์–ธํŠธ์— ๋ณด๋‚ธ๋‹ค.

 

3) ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ•ด๋‹น ํ† ํฐ์„ ๋ฐ›์œผ๋ฉด ์ผ๋ฐ˜์ ์œผ๋กœ ํด๋ผ์ด์–ธํŠธ ์ธก์˜ localStorage์— ์ €์žฅํ•˜๊ณ , ์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์•„์›ƒํ•˜๋ฉด

ํ† ํฐ์ด ํด๋ผ์ด์–ธํŠธ ์ธก(localStorage)์—์„œ ์‚ญ์ œ๋œ๋‹ค.

 

4) ์‚ฌ์šฉ์ž๊ฐ€ ์ธ์ฆ ๋ฐ ์ธ๊ฐ€๊ฐ€ ํ•„์š”ํ•œ ์š”์ฒญ์„ ํ•  ๋•Œ header์— ๋ฐœ๊ธ‰๋ฐ›์€ ํ† ํฐ์„ ๋‹ด์•„์„œ ๋ณด๋‚ธ๋‹ค.

 

5) ์„œ๋ฒ„ ์ธก์—์„œ๋Š” ์š”์ฒญ์— ํ† ํฐ ๊ฐ’์ด ์‹ค๋ ค์˜ค๋ฉด, JWT์˜ header์™€ payload๊ฐ’์„ ์„œ๋ฒ„์ธก์— ๊ฐ์ถฐ๋‘” secret key์™€ ํ•จ๊ป˜ ๋Œ๋ ค์„œ

๊ณ„์‚ฐ๋œ ๊ฒฐ๊ด๊ฐ’์ด Signature ๊ฐ’๊ณผ ์ผ์น˜ํ•˜๋Š” ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ค๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.( JWT ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ )

 

6) ์„œ๋ช… ๊ฐ’๊ณผ ๊ณ„์‚ฐ ๊ฐ’์ด ์ผ์น˜ํ•˜๊ณ , ์œ ํšจ๊ธฐ๊ฐ„๋„ ์ง€๋‚˜์ง€ ์•Š์•˜๋‹ค๋ฉด ํ•ด๋‹น ์‚ฌ์šฉ์ž๋Š” ์ดํ›„ ๋ชจ๋“  ์š”์ฒญ์— ๋Œ€ํ•ด ๋กœ๊ทธ์ธ๋œ ํšŒ์›์œผ๋กœ ๊ถŒํ•œ์„ ์ธ๊ฐ€(Authorization)ํ•œ๋‹ค.

 

 

 

JWT๋Š” ์„œ๋ฒ„ ์ธก์—์„œ ํ† ํฐ์„ ์ถ”์ ํ•˜๋Š” ๊ฒŒ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ํŽธ๋ฆฌํ•  ์ˆ˜ ์žˆ์œผ๋‚˜, ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ํ†ต์ œ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ํ•ด์ปค๊ฐ€ ํ† ํฐ์„ ํƒˆ์ทจํ•œ๋‹ค๋ฉด, ํ•ด์ปค๊ฐ€ ๊ฐ€์ง„ ํ† ํฐ์„ ๋ฌดํšจํ™”ํ•  ๋ฐฉ๋ฒ•์ด ์—†๋‹ค.

๊ทธ๋ž˜์„œ ๋ณดํ†ต ํ† ํฐ์˜ ์ˆ˜๋ช…์„ 30๋ถ„ ์ •๋„๋กœ ์งง๊ฒŒ ์žก๋Š”๋‹ค.

 

๋กœ๊ทธ์ธ์— ์„ฑ๊ณตํ•˜๋ฉด 2๊ฐœ์˜ ํ† ํฐ์„ ์ค€๋‹ค.

1) ์ˆ˜๋ช…์ด ๋ช‡ ์‹œ๊ฐ„ ๋˜๋Š” ๋ช‡ ๋ถ„๋‹จ์œ„๋กœ ์งง์€ access ํ† ํฐ.

2) ์ข€ ๋” ๊ธด ์ˆ˜๋ช…์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ( ๋ณดํ†ต 2์ฃผ๊ฐ€๋Ÿ‰ ) refresh ํ† ํฐ.

 

์ด 2๊ฐœ์˜ ํ† ํฐ์€ ์„œ๋น„์Šค์— ๋งž๊ฒŒ ์ž˜ ํ™œ์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ๊ฐ€์ง€์˜ ๋ฐฉ๋ฒ•์œผ๋กœ ๊ตฌํ˜„ํ•˜๋ฉด ๋œ๋‹ค.

 

 

 


 

 

Session & Cookie VS JWT

 

์ด์ œ ์ด ํฌ์ŠคํŒ…์˜ ์ฃผ์ œ์ธ ์„ธ์…˜๊ณผ ์ฟ ํ‚ค ๋ฐฉ์‹ VS JWT ๋ฐฉ์‹์„ ๋น„๊ตํ•ด๋ณด์ž -! 

 

Session-Based Authentication ์žฅ์ 

์„ธ์…˜์„ ์ด์šฉํ•˜๋ฉด ์„œ๋ฒ„ ์ธก์€ ๋กœ๊ทธ์ธ๋œ ์‚ฌ์šฉ์ž์˜ ๋ชจ๋“  ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ์ž ๋กœ๊ทธ์ธ ๊ด€๋ฆฌ์— ์šฉ์ดํ•˜๊ณ ,

stateful ํ•œ ๊ธฐ๋Šฅ๋“ค์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. (๊ฐ•์ œ ๋กœ๊ทธ์•„์›ƒ ๊ธฐ๋Šฅ, ๋กœ๊ทธ์ธ๋œ ๋ชจ๋“  ๋””๋ฐ”์ด์Šค ์ •๋ณด ํ™•์ธ ๊ธฐ๋Šฅ, ์ ‘์† ์ธ์› ์ œํ•œ ๊ธฐ๋Šฅ(๋„ทํ”Œ).. ๋“ฑ๋“ฑ)

 

Session-Based Authentication ๋‹จ์ 

์„œ๋ฒ„ ์ธก์— ์‚ฌ์šฉ์ž ๋กœ๊ทธ์ธ ์ •๋ณด๊ฐ€ ์ €์žฅ๋ผ ์žˆ๊ณ , ์„ธ์…˜ DB๊ฐ€ ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํŠธ๋ž˜ํ”ฝ์ด ๋งŽ์•„์ง€๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ๊ณต๊ฐ„์ด ๋” ํ•„์š”ํ•˜๊ฒŒ ๋œ๋‹ค.

 

 

 

Token-Based Authentication ์žฅ์ 

ํ† ํฐ ๊ธฐ๋ฐ˜ ์ธ์ฆ์€ ํด๋ผ์ด์–ธํŠธ ์ธก์— ์ €์žฅ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณ„๋„์˜ DB ์—†์ด ๋กœ๊ทธ์ธ ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

์ƒ์„ฑ๋œ ํ† ํฐ์„ ์ถ”์ ํ•˜์ง€ ์•Š๊ณ  ์„œ๋ฒ„๊ฐ€ ์•„๋Š” ๊ฒƒ์€ ํ† ํฐ์˜ ์œ ํšจ์„ฑ ์—ฌ๋ถ€์ด๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋ฒ„์˜ ๋ถ€๋‹ด์ด ์ ๋‹ค.

 

 

Token-Based Authentication ๋‹จ์ 

๋กœ๊ทธ์ธ๋œ ์‚ฌ์šฉ์ž๋ฅผ ํ†ต์ œํ•˜๊ธฐ ์–ด๋ ต๊ณ , ํ† ํฐ์ด ๋งŒ๋ฃŒ๋˜๊ธฐ ์ „๊นŒ์ง€๋Š” ์œ ํšจํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ•์ œ ๋กœ๊ทธ์•„์›ƒ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ณ ,

ํ•ด์ปค๊ฐ€ ํ† ํฐ์„ ํƒˆ์ทจํ–ˆ์„ ๋•Œ ํ•ด๋‹น ํ† ํฐ์„ ๋ฌดํšจํ™”์‹œํ‚ฌ ์ฆ‰๊ฐ์ ์ธ ๋Œ€์‘์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

 

 

 

 


 

์ฐธ๊ณ  ๋ฐ ์ถœ์ฒ˜

 

์–„์ฝ” Session VS Token Youtube

Nomad Coders์˜ Differences Between Cookis, Sessions and Tokens Youtube

Session ๊ธฐ๋ฐ˜ ์ธ์ฆ๊ณผ Token ๊ธฐ๋ฐ˜ ์ธ์ฆ ์ฐธ๊ณ  ๋ธ”๋กœ๊ทธ

Cookie ๋‚ด์šฉ ์ฐธ๊ณ  ๋ธ”๋กœ๊ทธ