JWT & 세션 인증

탁재민 2024. 4. 19. 12:33

JWT (JSON Web Token) 인증

설명

  • 사용자의 인증 정보를 JSON 객체에 인코딩하고 암호화 처리한 토큰
  • 클라이언트 사이드에서 관리
  • 확장성이 높고, 비용이 낮음, 그러나 유저 인증에 대한 직접적 컨트롤이 불가능

과정

  1. 로그인 및 토큰 생성:
    • 사용자가 로그인하면, 서버는 사용자의 인증 정보를 검증한 후, 서버의 비밀키로 서명된 JWT를 생성
    • 사용자 식별자, 유효 기간, 발급자 등의 정보 포함
  2. 토큰 전송:
    • 생성된 JWT는 사용자에게 전송
    • Response의 header나 body에 실어 보낸 후 브라우저의 웹 스토리지에 저장
    • 또는 쿠키 형태로 전송
  3. 토큰 활용:
    • 사용자가 서버에 요청을 할 때마다 JWT를 Authorization 헤더에 포함시켜 전송
    • 또는 쿠키 형태로 전송
    • 서버는 헤더에서 JWT를 추출하여 비밀키로 서명을 검증하고, 토큰이 유효한지 검증
  4. 세션 유지:
    • JWT의 유효성이 검증 후 요청 처리
    • 토큰이 만료었다면 접근 불가

세션 기반 인증

설명

  • 서버에서 사용자의 로그인 상태와 인증 정보를 관리
  • 서버 메모리에 세션을 저장하고, 클라이언트에는 세션 ID만을 쿠키로 전달
  • 확장성이 낮고 비용이 높음, 그러나 유저 인증에 대한 직접 컨트롤 가능

과정

  1. 로그인 및 세션 생성:
    • 사용자가 로그인하면, 서버는 사용자의 인증 정보를 검증하고 세션을 생성
    • 생성된 세션 ID가 클라이언트에 쿠키 형태로 전송
  2. 세션 ID 저장:
    • 클라이언트는 받은 세션 ID를 쿠키에 저장하고, 이후의 모든 요청에 이 쿠키를 포함시켜 서버에 전송
  3. 세션 유지:
    • 서버는 들어오는 요청마다 쿠키에서 세션 ID를 확인
    • 해당 세션 ID에 매핑된 데이터를 조회하여 사용자가 유효한지 검증
  4. 세션 종료:
    • 사용자가 로그아웃하면 서버는 해당 세션을 종료(삭제)하고, 클라이언트는 세션 ID를 무효화