[Node.js] JWT / 세션기반, 토큰기반 인증 시스템

Dorong·2023년 7월 21일
0

Node.js / MongoDB

목록 보기
19/23
post-thumbnail

✅ JWT

  • JWT는 JSON Web Token의 약자로,
  • 데이터가 JSON으로 이루어져 있는 토큰 의미
  • 두 개체가 서로 안전하게 정보를 주고받을 수 있도록 웹 표준으로 정의된 기술

🔸 세션 기반 인증 vs. 토큰 기반 인증

  • 사용자의 로그인 상태를 서버에서 처리하는 데 사용할 수 있는 대표적 두 가지 인증방식

🔹 세션 기반 인증 시스템

  • 세션기반 인증 시스템을 만드는 것은 서버가 사용자가 로그인 중임을 기억하고 있다는 뜻
  • 사용자가 로그인하면, 서버는 세션 저장소에 사용자의 정보를 조회하고 세션 id 발급
  • 발급된 id는 주로 쿠키에 저장
  • 이후 사용자가 다른 요청을 보낼 때마다 서버는 세션 저장소에서 세션을 조회한 후 로그인 여부를 결정하여 작업을 처리하고 응답
  • 세션 저장소는 주로 메모리, 디스크, DB 등을 사용
  • 하지만 서버 확장이 번거롭다는 단점
    • 서버의 인스턴스가 여러 개가 된다면 모든 서버끼리 같은 세션을 공유해야 하므로,
    • 세션 전용 DB를 만들어야 할 뿐 아니라 신경 써야 할 것도 많음

🔹 토큰 기반 인증 시스템

  • 토큰은 로그인 이후 서버가 만들어 주는 문자열
  • 해당 문자열 안에는 사용자의 로그인 정보와 해당 정보가 서버에서 발급되었음을 증명하는 서명이 들어있음
  • 서명 데이터는 해싱 알고리즘을 통해 만들어지는데,
  • 주로 HMAC SHA256, RSA SHA256 알고리즘 사용
  • 토큰은 서명이 있기 때문에 무결성이 보장됨
  • 시스템 흐름은
    • 사용자가 로그인 시 서버에게 토큰을 발급받고,
    • 사용자는 추후 다른 API 요청시 토큰과 함께 요청하게 됨
    • 서버는 토큰 유효성 검사를 하고, 결과에 따라 작업을 처리하고 응답
  • 서버 확장성이 높다는 장점
    • 서버에서 사용자 로그인 정보를 기억하기 위해 사용하는 리소스가 적음
    • 사용자 쪽에서 토큰을 가지고 있으므로 서버의 확장성이 높음
    • 서버 인스턴스가 여러 개로 늘어나도 서버끼리 사용자의 로그인 상태를 공유하고 있을 필요가 없음!!
profile
🥳믓진 개발자가 되겠어요🥳

0개의 댓글