CS/Network

[CS/Network] ์„ธ์…˜(Session) & JWT

yulee_to 2022. 8. 8. 14:27

 

 

Network


๐ŸŒ Authentication & Authorization

Authentication์€ ์ธ์ฆ์ด๋ผ๋Š” ๋œป์œผ๋กœ ํŠน์ • ์„œ๋น„์Šค์— ์ผ์ • ๊ถŒํ•œ์ด ์ฃผ์–ด์ง„ ์‚ฌ์šฉ์ž์ž„์„ ID, password๋กœ ์ธ์ฆ๋ฐ›๋Š”๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ๊ฐ„๋‹จํžˆ ๋งํ•˜์ž๋ฉด ๋กœ๊ทธ์ธ์ด๋‹ค. Authorization์€ ์ธ๊ฐ€๋ผ๋Š” ๋œป์œผ๋กœ ๋กœ๊ทธ์ธ์„ ํ†ตํ•ด ํ•œ๋ฒˆ ์ธ์ฆ์„ ๋ฐ›์€ ์‚ฌ์šฉ์ž๊ฐ€ ์ดํ›„ ์„œ๋น„์Šค์˜ ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ๋“ค์„ ์‚ฌ์šฉํ•  ๋•Œ ๋กœ๊ทธ์ธ๋˜์–ด ์žˆ์Œ์„ ํ™•์ธ๋ฐ›๊ณ  ์‚ฌ์šฉํ—ˆ๊ฐ€๋ฅผ ํ•ด์ค€๋‹ค. ์ฆ‰, ๋กœ๊ทธ์ธ๋œ ์ƒํƒœ๋ฅผ ์œ ์ง€์‹œ์ผœ์ฃผ๋Š” ๊ฒƒ์ด ์ธ๊ฐ€์ด๋‹ค.


๐ŸŒ ์„ธ์…˜(Session)

์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์ธ์— ์„ฑ๊ณตํ•˜๊ฒŒ ๋˜๋ฉด ์„œ๋ฒ„๊ฐ€ '์„ธ์…˜ ํ‘œ๋”ฑ์ง€'๋ผ๋Š” ๊ฒƒ์„ ์ถœ๋ ฅํ•ด ์„ธ์…˜ ํ‘œ๋”ฑ์ง€์˜ ๋ฐ˜์€ ์‚ฌ์šฉ์ž์˜ ๋ธŒ๋ผ์šฐ์ €๋กœ ์ „์†กํ•˜๊ณ  ๋ฐ˜์€ ์„œ๋ฒ„์˜ ๋ฉ”๋ชจ๋ฆฌ๋‚˜ ํ•˜๋“œ๋””์Šคํฌ,๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅํ•œ๋‹ค. ์‚ฌ์šฉ์ž์˜ ๋ธŒ๋ผ์šฐ์ €๋กœ ๊ฐ„ ์„ธ์…˜ ํ‘œ๋”ฑ์ง€์˜ ์ ˆ๋ฐ˜์€ Session ID๋ผ๋Š” ์ด๋ฆ„์˜ ์ฟ ํ‚ค๋กœ ์ €์žฅ์ด ๋˜๊ณ  ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ์š”์ฒญ์ด ๋“ค์–ด์˜ฌ ๋•Œ๋งˆ๋‹ค ์„œ๋ฒ„์—๊ฒŒ ์ด Session ID๋ฅผ ์‹ค์–ด๋ณด๋‚ธ๋‹ค. ์„œ๋ฒ„๋Š” ๋ฐ›์€ Session ID์™€ ์•„๊นŒ ์ €์žฅํ•ด๋‘” ๋‚จ์€ ์„ธ์…˜ ํ‘œ๋”ฑ์ง€์˜ ๋ฐ˜์ด ์ผ์น˜ํ•˜๋Š” ๊ฒŒ ์žˆ์œผ๋ฉด ์ธ๊ฐ€๋ฅผ ํ•ด์ค€๋‹ค.

์ด์ฒ˜๋Ÿผ Session ID๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ์„œ๋ฒ„์— ๋กœ๊ทธ์ธ๋˜์–ด์žˆ์Œ์ด ์ง€์†๋˜๋Š” ์ƒํƒœ๋ฅผ Session์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

 

์„ธ์…˜์˜ ๋‹จ์  

- ์‚ฌ์šฉ์ž๊ฐ€ ๋™์‹œ์— ๋งŽ์ด ์ ‘์†ํ•˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•ด์ง

- ์„œ๋ฒ„ ์žฌ๋ถ€ํŒ…์‹œ ๋ฉ”๋ชจ๋ฆฌ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋‚ ์•„๊ฐ

- ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋“œ๋‚˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋„ฃ์œผ๋ฉด ์†๋„๊ฐ€ ๋Š๋ ค์ง

- ์„œ๋ฒ„๊ฐ€ ์—ฌ๋Ÿฌ๋Œ€์ผ ๋•Œ ๋กœ๋“œ๋ฐ”๋ž€์‹ฑ(์š”์ฒญ์„ ์—ฌ๋Ÿฌ ์„œ๋ฒ„์— ๋ถ„์‚ฐ)์œผ๋กœ ์ธํ•ด ์„ธ์…˜ ์œ ์ง€๊ฐ€ ์•ˆ๋จ


๐ŸŒ JWT (JSON Web Token)

JWT๋Š” ์ผ์ข…์˜ ํ™•์ธ์„œ๋กœ ์šฐ๋ฆฌ๊ฐ€ ์–ด๋–ค ์›น์‚ฌ์ดํŠธ์— ๋กœ๊ทธ์ธ์„ ํ•ด์„œ ์„ฑ๊ณต์ ์œผ๋กœ ์ธ์ฆ์ด ์ด๋ฃจ์–ด์ง€๋ฉด ์„œ๋ฒ„๋Š” ์‚ฌ์ธ๋œ ํ™•์ธ์„œ(JWT)๋ฅผ ์šฐ๋ฆฌ์—๊ฒŒ ์ œ๊ณตํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์•ž์œผ๋กœ ์š”์ฒญ ๋•Œ๋งˆ๋‹ค JWT๋ฅผ ์„œ๋ฒ„์—๊ฒŒ ๊ฐ™์ด ๋ณด์—ฌ์ฃผ๋ฉด์„œ ๊ถŒํ•œ์„ ํ™•์ธ๋ฐ›๋Š” ๊ฒƒ์ด๋‹ค. ์„œ๋ฒ„๋Š” JWT๋งŒ ํ™•์ธํ•ด ์ธ๊ฐ€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„ธ์…˜ DB์— ์ €์žฅํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค. 

 

JWT๋Š” ์ธ์ฝ”๋”ฉ ๋˜๋Š” ์•”ํ˜ธํ™”๋œ 3๊ฐ€์ง€ ๋ฐ์ดํ„ฐ๋ฅผ .(dot)์œผ๋กœ ๊ตฌ๋ถ„ํ•ด ์ด์–ด๋ถ™์ธ ํ˜•ํƒœ๋กœ ๋˜์–ด ์žˆ๋‹ค.

๊ทธ 3๊ฐ€์ง€ ๋ฐ์ดํ„ฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • header : ํ—ค๋”์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋””์ฝ”๋”ฉํ•˜๋ฉด 2๊ฐ€์ง€ ์ •๋ณด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋Š”๋ฐ ํ•˜๋‚˜๋Š” type์œผ๋กœ JWT์˜ ๊ฒฝ์šฐ ํ•ญ์ƒ ์ด ๊ฐ’์€ JWT์ด๋‹ค. ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” alg๋กœ signature ๊ฐ’์„ ๋งŒ๋“œ๋Š” ๋ฐ ์‚ฌ์šฉ๋  ์•”ํ˜ธํ™” ์•Œ๊ณ ๋ฆฌ์ฆ˜(ex. HS256)์„ ์˜๋ฏธํ•œ๋‹ค. ์ด ์•”ํ˜ธํ™” ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ํ•œ ๋ฐฉํ–ฅ์œผ๋กœ๋งŒ ๊ณ„์‚ฐ๋  ์ˆ˜ ์žˆ๋‹ค.
  • payload : ํŽ˜์ด๋กœ๋“œ์˜ ๋ฐ์ดํ„ฐ๋ฅผ Base64๋กœ ๋””์ฝ”๋”ฉํ•˜๋ฉด JSON ํ˜•ํƒœ๋กœ ๋œ ์ •๋ณด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ ๋‚ด์šฉ์—๋Š” ๋ˆ„๊ฐ€ ๋ˆ„๊ตฌ์—๊ฒŒ ๋ฐœ๊ธ‰ํ–ˆ๋Š”์ง€, ํ† ํฐ์˜ ์œ ํšจ๊ธฐ๊ฐ„, ์„œ๋น„์Šค๊ฐ€ ๊ณต๊ฐœํ•˜๊ธธ ์›ํ•˜๋Š” ๋‚ด์šฉ ๋“ฑ์ด ๋‹ด๊ฒจ์ ธ ์žˆ๋‹ค.
  • signature : header + payload + ์„œ๋ฒ„์— ๊ฐ์ถฐ๋†“์€ ๋น„๋ฐ€ ํ‚ค๋ฅผ ํ•ฉํ•ด ํ—ค๋”์— ์ €์žฅ๋œ ์•”ํ˜ธํ™” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•ด ์•”ํ˜ธํ™”ํ•œ ๊ฐ’์ด๋‹ค. 

=> ๋น„๋ฐ€ํ‚ค๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ณ„์‚ฐํ•œ ๊ฐ’์ด ์„œ๋ช…๊ฐ’๊ณผ ๊ฐ™๊ณ , ํ† ํฐ์˜ ์œ ํšจ๊ธฐ๊ฐ„์ด ์ง€๋‚˜์ง€ ์•Š์•˜๋‹ค๋ฉด ์ธ๊ฐ€๋ฅผ ๋‚ด์ค€๋‹ค.

ํ† ํฐ์„ ์ด์šฉํ•˜์—ฌ ์„œ๋ฒ„๋Š” ์‚ฌ์šฉ์ž์˜ ์ƒํƒœ๋ฅผ ๋”ฐ๋กœ ๊ธฐ์–ตํ•ด๋‘˜ ํ•„์š” ์—†์ด ๋น„๋ฐ€ํ‚ค๋งŒ ์•Œ๋ฉด ์š”์ฒญ์ด ๋“ค์–ด์˜ฌ ๋–„๋งˆ๋‹ค ํ† ํฐ์œผ๋กœ ์‚ฌ์šฉ์ž๋ฅผ ํŒ๋ณ„ํ•  ์ˆ˜ ์žˆ๋‹ค.


๐ŸŒ Acess Token & Refresh Token

acess token์€ ๋งค๋ฒˆ ์ธ๊ฐ€๋ฐ›์„ ๋•Œ ์“ฐ๋Š” ์ˆ˜๋ช… ์งง์€ ํ† ํฐ์œผ๋กœ, ์ˆ˜๋ช…์ด ๋‹คํ•˜๋ฉด refresh token์„ ์„œ๋ฒ„์—๊ฒŒ ๋ณด๋‚ด DB์— ์ €์žฅ๋œ ๊ฐ’๊ณผ ์ผ์น˜ํ•˜๋ฉด ์ƒˆ acess token์„ ๋ฐœ๊ธ‰ํ•ด์ค€๋‹ค. ์ด acess token์€ ํƒˆ์ทจ ๋‹นํ•ด๋„ ๊ธˆ๋ฐฉ ๋งŒ๋ฃŒ๋œ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.

refresh token์€ access token์„ ์žฌ๋ฐœ๊ธ‰๋ฐ›์„ ๋•Œ ์“ฐ๋Š” ์ˆ˜๋ช…์ด ๊ธด token์œผ๋กœ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ณด๋‚ด๊ณ  ๋‚˜์„œ ์ƒ์‘๊ฐ’์„ DB์—๋„ ์ €์žฅํ•˜๋ฉฐ, DB์—์„œ ์ด token์ด ์ง€์›Œ์ ธ๋„ ์‚ด์•„์žˆ๋Š” acess toekn์ด ์žˆ์–ด ์ฆ‰๊ฐ์ ์ธ ํ”ผํ•ด๋Š” ์—†๋‹ค. ์ด ๋‘ ํ† ํฐ์„ ์ด์šฉํ•œ ๋ฐฉ๋ฒ•์€ ์ž ๊น์˜ ํ”ผํ•ด๋Š” ๋ง‰์„ ์ˆ˜ ์žˆ์ง€๋งŒ ์™„์ „ํžˆ ์•ˆ์ „ํ•œ ๋ฐฉ๋ฒ•์€ ์•„๋‹ˆ๋‹ค.


๐Ÿ”—์ฐธ๊ณ 

https://youtu.be/1QiOXWEbqYQ

https://velog.io/@gotaek/์„ธ์…˜Session๊ณผ-JWT

728x90

'CS > Network' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[CS/Network] TCP์˜ 3&4-way handshake  (0) 2022.12.28