πŸ” 전체적인 ꡬ쑰

μŠ€ν¬λ¦°μƒ·, 2019-08-21 15-15-20.png

πŸ₯˜ Encryption

  • 일련의 정보λ₯Ό μž„μ˜μ˜ 방식을 μ‚¬μš©ν•˜μ—¬ λ‹€λ₯Έ ν˜•νƒœλ‘œ λ³€κ²½μ‹œν‚€λŠ” 것
  • μ†Œμœ μž 외에 이해할 수 없도둝 'μ•Œκ³ λ¦¬μ¦˜'을 μ΄μš©ν•΄ 정보 전달

🍨 Hashing

  • μ–΄λ– ν•œ λ¬Έμžμ—΄μ— 'μž„μ˜μ˜ μ—°μ‚°'을 μ €μš©ν•˜μ—¬ λ‹€λ₯Έ λ¬Έμžμ—΄λ‘œ λ³€ν™˜ (μ•”ν˜Έν™”)
  1. ν•΄μ‹œ κ°’ 계산이 였래 걸리지 μ•Šμ•„μ•Όν•œλ‹€.
  2. μ΅œλŒ€ν•œ ν•΄μ‹œ 값을 ν”Όν•˜λ©°, 각자 고유의 ν•΄μ‹œ 값을 κ°€μ Έμ•Όν•œλ‹€.
  3. μž‘μ€ λ‹¨μœ„ 변경에도 'μ™„μ „' λ‹€λ₯Έ ν•΄μ‹œ 값을 κ°€μ Έμ•„ν•œλ‹€.

🍀 Salt

  • ν•΄μ‹œ ν•˜λ €λŠ” 원본에 또 μΆ”κ°€νλŠ” κ°’
  • κΈ°μ‘΄ : μ•”ν˜Έν™” ν•˜λ €λŠ” κ°’ => hash κ°’
    Salt : μ•”ν˜Έν™” ν•˜λ €λŠ” κ°’ + Salt κ°’ => hash κ°’

    🍜 Crypto (NodeJS)

μŠ€ν¬λ¦°μƒ·, 2019-08-21 15-34-04.png

    const hahs = crypto.createHmac('μ•”ν˜Έν™” 방식', 'μ•”ν˜Έν™” Key')
                       .update('Hashing ν•  κ°’')
                       .digest('output type') // hex 

μŠ€ν¬λ¦°μƒ·, 2019-08-21 15-54-47.png

μ„Έμ…˜μ˜ λ™μž‘ μˆœμ„œ

  1. ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„œλ²„μ— 처음으둜 Requestλ₯Ό 보냄 (첫 μš”μ²­μ΄κΈ° λ•Œλ¬Έμ— session idκ°€ μ‘΄μž¬ν•˜μ§€ μ•ŠμŒ)
  2. μ„œλ²„μ—μ„œλŠ” session id μΏ ν‚€ 값이 μ—†λŠ” 것을 ν™•μΈν•˜κ³  μƒˆλ‘œ λ°œκΈ‰ν•΄μ„œ 응닡
  3. 이후 ν΄λΌμ΄μ–ΈνŠΈλŠ” 전달받은 session id 값을 맀 μš”μ²­λ§ˆλ‹€ 헀더 쿠킀에 λ„£μ–΄μ„œ μš”μ²­
  4. μ„œλ²„λŠ” session idλ₯Ό ν™•μΈν•˜μ—¬ μ‚¬μš©μžλ₯Ό 식별
  5. ν΄λΌμ΄μ–ΈνŠΈκ°€ λ‘œκ·ΈμΈμ„ μš”μ²­ν•˜λ©΄ μ„œλ²„λŠ” session을 λ‘œκ·ΈμΈν•œ μ‚¬μš©μž μ •λ³΄λ‘œ κ°±μ‹ ν•˜κ³  μƒˆλ‘œμš΄ session idλ₯Ό λ°œκΈ‰ν•˜μ—¬ 응닡
  6. 이후 ν΄λΌμ΄μ–ΈνŠΈλŠ” 둜그인 μ‚¬μš©μžμ˜ session id μΏ ν‚€λ₯Ό μš”μ²­κ³Ό ν•¨κ»˜ μ „λ‹¬ν•˜κ³  μ„œλ²„μ—μ„œλ„ 둜그인된 μ‚¬μš©μžλ‘œ 식별 κ°€λŠ₯
  7. ν΄λΌμ΄μ–ΈνŠΈ μ’…λ£Œ (λΈŒλΌμš°μ € μ’…λ£Œ) μ‹œ session id 제거, μ„œλ²„μ—μ„œλ„ μ„Έμ…˜ 제거

μ„Έμ…˜μ˜ νŠΉμ§•

  • μ„Έμ…˜ μ•„μ΄λ””λŠ” λΈŒλΌμš°μ € λ‹¨μœ„λ‘œ μ €μž₯되고 λΈŒλΌμš°μ € μ’…λ£Œμ‹œ μ†Œλ©Έλ©λ‹ˆλ‹€.
  • λ‘œκ·ΈμΈν•œ μ‚¬μš©μžμ— λŒ€ν•΄μ„œλ§Œ μ„Έμ…˜μ„ μƒμ„±ν•˜λŠ” 것이 μ•„λ‹™λ‹ˆλ‹€.
    λ”°λΌμ„œ λ‘œκ·Έμ•„μ›ƒν•˜λ©΄ μƒˆλ‘œμš΄ μ‚¬μš©μžλ‘œ μΈμ‹ν•΄μ„œ μƒˆλ‘œμš΄ μ„Έμ…˜μ΄ μƒμ„±λ©λ‹ˆλ‹€.
  • μ‚¬μš©μžκ°€ 둜그인 ν–ˆλŠ”μ§€, λ‹‰λ„€μž„ λ“±μ˜ μ‚¬μš©μžκ°€ μš”μ²­ ν•  λ•Œ λ§ˆλ‹€
    ν•„μš”ν•œ 정보듀을 μ„Έμ…˜μ— 담아두면 μ‚¬μš©μž 디비에 μ ‘κ·Όν•  ν•„μš”κ°€ μ—†μ–΄μ„œ νš¨μœ¨μ μž…λ‹ˆλ‹€.

πŸŽ‚ Session (Client 와 Serverκ°€ μ„œλ‘œ ν†΅μ‹ ν•˜λŠ” 경둜)

  • μ‚¬μš©μžμ˜ 정보λ₯Ό μ‚¬μš©μž μͺ½μ΄ μ•„λ‹Œ μ„œλ²„ μƒμ—μ„œ 관리(μ €μž₯)ν•œλ‹€.
  • μ„œλ²„μ™€ ν΄λΌμ΄μ–ΈνŠΈμ˜ 연결이 ν™œμ„±ν™” 된 μƒνƒœ
  • μ„œλ²„κ°€ Client에 λŒ€ν•΄ μœ μΌν•œ IDλ₯Ό λΆ€μ—¬ν•˜μ—¬ μ„œλ²„ μΈ‘μ—μ„œ 관리
  • 각 Client ID의 Session 객체 λ§ˆλ‹€ Dataλ₯Ό 관리 ν•  수 있음
  • λ³΄μ•ˆμƒ μ€‘μš”ν•œκ±°λŠ” μ„œλ²„μ—μ„œ 관리

    μ‚¬μ΄νŠΈλ₯Ό μ—΄λ•Œ Session이 ν™œμ„±ν™” λ˜μ–΄ Client IDλ₯Ό
    μ£Όλ©΄μ„œ μ˜€ν”ˆν•˜κ²Œν•΄μ€€λ‹€.


  • μ‚¬μš©μžμ˜ 정보λ₯Ό μ‚¬μš©μž λ©”λͺ¨λ¦¬(λΈŒλΌμš°μ €)μ—μ„œ κ΄€λ¦¬ν•œλ‹€.
  • μ„œλ²„κ°€ μ‚¬μš©μžμ˜ μœ„μΉ˜μ— 정보λ₯Ό μ €μž₯ν•˜κ³  뢈러올수 μžˆλŠ” μˆ˜λ‹¨
  • 이름, κ°’, 만료 λ‚ μ§œ, 경둜 정보

    ν΄λΌμ΄μ–ΈνŠΈκ°€ μ²˜μŒμ— μ„œλ²„μ— λ“€μ–΄μ˜€λ©΄ μ„œλ²„λŠ” μΏ ν‚€λ₯Ό μƒμ„±ν•΄μ„œ
    response둜 μ£Όλ©΄μ„œ 쿠킀도 같이 μ£Όκ³  λ‹€μŒλ²ˆμ— ν΄λΌμ΄μ–ΈνŠΈκ°€
    μš”μ²­ν• λ•Œ λ°›μ•˜λ˜ μΏ ν‚€λ₯Ό request둜 λ³΄λ‚΄λ©΄μ„œ ν˜•μ‹μ— λ§žμΆ°μ„œ λ¬Όμ–΄λ³Έλ‹€κ³ 
    μƒκ°ν•˜λ©΄ 될 것 κ°™μŠ΅λ‹ˆλ‹€.

μŠ€ν¬λ¦°μƒ·, 2019-08-21 15-42-23.png

μ„Έμ…˜μ€ μ„œλ²„μ—μ„œ 가지고 μžˆλŠ” 정보이고, μΏ ν‚€λŠ” μ‚¬μš©μžμ—κ²Œ λ°œκΈ‰λœ μ„Έμ…˜μ„
μ—΄κΈ°μœ„ν•œ 열쇠라고 μƒκ°ν•˜μ‹œλ©΄ 될것 κ°™μŠ΅λ‹ˆλ‹€.


πŸ™ Token (Session을 μΈμ¦ν•˜κΈ° μœ„ν•œ 정보)

  • 인증을 μœ„ν•΄ μ‚¬μš©λ˜λŠ” μ•”ν˜Έν™” 된 λ¬Έμžμ—΄
    1. Http ν†΅μ‹ μ˜ Stateless νŠΉμ§•κ³Ό μ•Œλ§žλ‹€. (μ—°κ²°λœ μƒνƒœμ— 따라 ꡐλ₯˜κ°€λŠ₯이라)
    2. μœ μ €μ˜ 인증 정보λ₯Ό μ„œλ²„λ‚˜ μ„Έμ…˜μ— 담아두지 μ•ŠμŒ
    3. μœ μ €μ˜ ν™œμ„±ν™” μ—¬λΆ€λ₯Ό 신경쓰지 μ•Šκ³  λ„˜κ²¨μ§„ μš”μ²­μ— 담겨진 Token의 정합성확인

μŠ€ν¬λ¦°μƒ·, 2019-08-21 16-01-07.png

즉, Clientκ°€ μš”μ²­ν•˜λ©΄ token을 μ„œλ²„μ—μ„œ λ§Œλ“€μ–΄μ„œ μ €μž₯ν•˜κ³ , ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œλ„ λ³΄λ‚΄μ€λ‹ˆλ‹€. μ΄λ ‡κ²Œλ˜λ©΄ cookie, token λ‘κ°œλ‹€ μ£Όκ³  λ°›κ³  ν•˜κ²Œλœλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. (Client 와 Server 두 츑에 λ‹€ cookie,token을 μ €μž₯ν•˜κ³ μžˆμŠ΅λ‹ˆλ‹€.)


πŸ₯ͺ Flow

μŠ€ν¬λ¦°μƒ·, 2019-08-21 15-16-27.png