μΏ ν‚€

μ •μ˜

μΏ ν‚€λŠ” Key-Value ν˜•μ‹μ˜ λ¬Έμžμ—΄ 덩어리이닀. ν΄λΌμ΄μ–ΈνŠΈκ°€ μ–΄λ– ν•œ μ›Ή μ‚¬μ΄νŠΈλ₯Ό λ°©λ¬Έν•  경우 κ·Έ μ‚¬μ΄νŠΈκ°€ μ‚¬μš©ν•˜κ³  μžˆλŠ” μ„œλ²„λ₯Ό 톡해 ν΄λΌμ΄μ–ΈνŠΈμ˜ λΈŒλΌμš°μ €μ— μ„€μΉ˜λ˜λŠ” μž‘μ€ 기둝 정보 νŒŒμΌμ΄λ‹€.

λ™μž‘ 원리

  • ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„œλ²„μ— μš”μ²­μ„ 보낸닀.
  • μ„œλ²„λŠ” ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­μ— λŒ€ν•œ 응닡을 μž‘μ„±ν•  λ•Œ, ν΄λΌμ΄μ–ΈνŠΈ 츑에 μ €μž₯ν•˜κ³  싢은 정보λ₯Ό 응닡 ν—€λ”μ˜ Set-Cookie에 λ‹΄λŠ”λ‹€.
  • 이후 ν•΄λ‹Ή ν΄λΌμ΄μ–ΈνŠΈλŠ” μš”μ²­μ„ 보낼 λ•Œλ§ˆλ‹€, 맀번 μ €μž₯된 μš”μ²­ ν—€λ”μ˜ 쿠킀에 λ‹΄μ•„ 보낸닀.

단점

  • μš”μ²­ μ‹œ μΏ ν‚€μ˜ 값을 κ·ΈλŒ€λ‘œ 보내기 λ•Œλ¬Έμ— 유좜 및 μ‘°μž‘ λ‹Ήν•  μœ„ν—˜μ΄ μ‘΄μž¬ν•œλ‹€.
  • μš”λŸ‰ μ œν•œμ΄ μžˆμ–΄ λ§Žμ€ 정보λ₯Ό 담을 수 μ—†λ‹€.
  • μ›Ή λΈŒλΌμš°μ €λ§ˆλ‹€ 쿠킀에 λŒ€ν•œ 지원 ν˜•νƒœκ°€ λ‹€λ₯΄κΈ° λ•Œλ¬Έμ— λΈŒλΌμš°μ €κ°„ κ³΅μœ κ°€ λΆˆκ°€λŠ₯ν•˜λ‹€.

μ„Έμ…˜

μ •μ˜

μΏ ν‚€μ˜ λ³΄μ•ˆμ  이슈λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄, μ„Έμ…˜μ€ μ„œλ²„ μΈ‘μ—μ„œ ν΄λΌμ΄μ–ΈνŠΈμ˜ λ―Όκ°ν•œ 인증 정보λ₯Ό μ €μž₯ν•˜κ³  κ΄€λ§‡λ‚˜λ‹€.

λ™μž‘ 원리

  • μœ μ €κ°€ μ›Ήμ‚¬μ΄νŠΈμ—μ„œ λ‘œκ·ΈμΈν•˜λ©΄ μ„Έμ…˜μ΄ μ„œλ²„ λ©”λͺ¨λ¦¬ 상에 μ €μž₯λœλ‹€.
  • μ„œλ²„μ—μ„œ λΈŒλΌμš°μ € 쿠킀에 μ„Έμ…˜ IDλ₯Ό μ €μž₯ν•œλ‹€.
  • λΈŒλΌμš°μ €λŠ” ν•΄λ‹Ή μ‚¬μ΄ν…Œ λŒ€ν•œ λͺ¨λ“  μš”μ²­μ— μ„Έμ…˜ IDλ₯Ό 쿠킀에 λ‹΄μ•„ μ „μ†‘ν•œλ‹€.
  • μ„œλ²„λŠ” ν΄λΌμ΄μ–ΈνŠΈκ°€ 보낸 μ„Έμ…˜ ID와 μ„œλ²„μ—μ„œ κ΄€λ¦¬λ˜κ³  μžˆλŠ” μ„Έμ…˜ ID와 λΉ„κ΅ν•˜μ—¬ 인증을 μˆ˜ν–‰ν•œλ‹€.

단점

  • μ„Έμ…˜ ID 자체λ₯Ό νƒˆμ·¨ν•˜μ—¬ ν΄λΌμ΄μ–ΈνŠΈμΈμ²™ μœ„μž₯ν•  수 μžˆλ‹€λŠ” ν•œκ³„κ°€ μ‘΄μž¬ν•œλ‹€.

토큰

μ •μ˜

ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„œλ²„μ— μ ‘μ†ν•˜λ©΄ μ„œλ²„μ—μ„œ ν•΄λ‹Ή ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ μΈμ¦λ˜μ—ˆλ‹€λŠ” 의미둜 토큰을 λΆ€μ—¬ν•œλ‹€. 이 토큰은 μœ μΌν•˜λ©° 토큰을 λ°œκΈ‰λ°›μ€ ν΄λΌμ΄μ–ΈνŠΈλŠ” μš”μ²­μ„ 보낼 λ•Œ μš”μ²­ 헀더에 토큰을 μ‹¬μ–΄μ„œ 보낸닀. 이λ₯Ό 톡해 인증 과정을 μ²˜λ¦¬ν•˜κ²Œ λœλ‹€.

λ™μž‘ 방법

  • μ‚¬μš©μžκ°€ 아이디와 λΉ„λ°€λ²ˆν˜Έλ‘œ λ‘œκ·ΈμΈμ„ ν•œλ‹€.
  • μ„œλ²„μ—μ„œ ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ 토큰을 λ°œκΈ‰ν•œλ‹€.
  • ν΄λΌμ΄μ–ΈνŠΈλŠ” 토큰을 μΏ ν‚€ ν˜Ήμ€ μŠ€ν† λ¦¬μ§€μ— μ €μž₯ν•˜κ³ , μ„œλ²„μ— μš”μ²­ν•  λ•Œλ§ˆλ‹€ ν•΄λ‹Ή 토큰을 HTTP μš”μ²­ 헀더에 ν¬ν•¨μ‹œμΌœ μ „λ‹¬ν•œλ‹€.
  • μ„œλ²„λŠ” 전달받은 토큰을 κ²€μ¦ν•˜κ³  μš”μ²­μ— μ‘λ‹΅ν•œλ‹€.

단점

  • 데이터가 κΈΈκΈ° λ•Œλ¬Έμ— 인증 μš”μ²­μ΄ λ§Žμ•„μ§ˆμˆ˜λ‘ λ„€νŠΈμ›Œν¬ λΆ€ν•˜κ°€ μ‹¬ν•΄μ§ˆ 수 μžˆλ‹€.
  • 토큰을 νƒˆμ·¨λ‹Ήν•˜λ©΄ λŒ€μ²˜ν•˜κΈ° μ–΄λ ΅λ‹€.
  • Payload μžμ²΄λŠ” μ•”ν˜Έν™”λ˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— μ€‘μš”ν•œ μ •λ³΄λŠ” 담을 수 μ—†λ‹€.

JWT

μ •μ˜

인증 정보에 ν•„μš”ν•œ 정보λ₯Ό μ•”ν˜Έν™”μ‹œν‚¨ JSON(Json Web Token) 토큰이닀. JSON 데이터λ₯Ό Base64λ₯Ό 톡해 μΈμ½”λ”©ν•˜μ—¬ μ§λ ¬ν™”ν•œ 것이며, 토큰 λ‚΄λΆ€μ—λŠ” μœ„λ³€μ‘° λ°©μ§€λ₯Ό μœ„ν•΄ κ°œμΈν‚€λ₯Ό ν†΅ν•œ μ „μžμ„œλͺ…도 λ“€μ–΄μžˆλ‹€. λ”°λΌμ„œ μ‚¬μš©μžκ°€ JWTλ₯Ό μ„œλ²„λ‘œ μ „μ†‘ν•˜λ©΄ μ„œλ²„λŠ” μ„œλͺ…을 κ²€μ¦ν•˜λŠ” 과정을 거치게 되며 검증이 μ™„λ£Œλ˜λ©΄ μš”μ²­ν•œ 응닡을 λŒλ €μ€€λ‹€.

ꡬ쑰

  • Header
    • alg : μ„œλͺ… μ•”ν˜Έν™” μ•Œκ³ λ¦¬μ¦˜
    • typ : 토큰 μœ ν˜•
  • Payload
    • Registed claims : 미리 μ •μ˜λœ ν΄λ ˆμž„
      • iss : λ°œν–‰μž
      • exp : 만료 μ‹œκ°„
      • sub : 제λͺ©
      • iat : λ°œν–‰ μ‹œκ°„
      • jti : JWI ID
    • Public claims : μ‚¬μš©μžκ°€ μ •μ˜ν•  수 μžˆλŠ” ν΄λ ˆμž„ 곡개용 정보 전달을 μœ„ν•΄ μ‚¬μš©
    • Private claims : 외뢀에 κ³΅κ°œλ˜λ„ μƒκ΄€μ—†μ§€λ§Œ ν•΄λ‹Ή μœ μ €λ₯Ό νŠΉμ •ν•  수 μžˆλŠ” 정보λ₯Ό λ‹΄μŒ
  • Signature
    • (헀더 + νŽ˜μ΄λ‘œλ“œ)와 μ„œλ²„μ— κ°–κ³  μžˆλŠ” μ‹œν¬λ¦Ώ ν‚€λ₯Ό ν•©μΉœ 것을 헀더에 μ •μ˜ν•œ μ•Œκ³ λ¦¬μ¦˜μœΌλ‘œ μ•”ν˜Έν™”