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

2022. 8. 8. 14:27ยทCS/Network
728x90
๋ฐ˜์‘ํ˜•

 

 

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
'CS/Network' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [CS/Network] TCP์˜ 3&4-way handshake
yulee_to
yulee_to
  • yulee_to
    yulee
    yulee_to
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ์ „์ฒด ๊ธ€ (170)
      • CS (2)
        • OS (0)
        • DB (0)
        • Network (2)
      • Develop (1)
        • Spring (9)
        • Java (12)
        • Python (0)
        • Algorithm (0)
        • ๊ธฐํƒ€ (0)
      • PS (39)
        • C++ (39)
        • Java (0)
      • TIL (61)
      • Book (39)
        • ์ž๋ฐ”์˜ ์‹  (32)
        • ์Šคํ”„๋ง ์ž…๋ฌธ์„ ์œ„ํ•œ ์ž๋ฐ” ๊ฐ์ฒด ์ง€ํ–ฅ์˜ ์›๋ฆฌ์™€ ์ดํ•ด (7)
      • ETC (4)
        • Blog (3)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ๊ฐ์ฒด์ง€ํ–ฅ
    EC2
    ์Šคํ”„๋ง ์ž…๋ฌธ
    1์ผ1๋ฐฑ์ค€
    ์Šคํ„ฐ๋””
    C++
    TiL
    ๋ฐฑ์ค€
    ์•Œ๊ณ ๋ฆฌ์ฆ˜
    ์ž๋ฐ”์˜ ์‹ 
    ๋ฉ€ํ‹ฐ์บ ํผ์Šคit๋ถ€ํŠธ์บ ํ”„
    boj
    aws
    ๋ถ€ํŠธ์บ ํ”„ํ›„๊ธฐ
    ์—์Šค๋„ท์‹œ์Šคํ…œ
    ํด๋ผ์šฐ๋“œ ํ™œ์šฉ ๋„คํŠธ์›Œํฌ ์—”์ง€๋‹ˆ์–ด ๋ถ€ํŠธ์บ ํ”„
    ์ž๋ฐ”
    GodOfJava
    ์—์Šค๋„ท์‹œ์Šคํ…œ ๋ถ€ํŠธ์บ ํ”„
    Java
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • 250x250
  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
yulee_to
[CS/Network] ์„ธ์…˜(Session) & JWT
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”