토큰(vs 쿠키,세션)

임수정·2023년 9월 1일
0

인증&인가(토큰)

목록 보기
2/3
post-thumbnail

지난 포스팅에서는 쿠키와 세션에 대해서 중점적으로 알아보았습니다.
이번 포스팅에서는 토큰에 대해서 알아보고 토큰이 어떻게 쿠키,세션과 다른 차이점을 가지고 있는지 알아보겠습니다.

지난 포스팅 : 쿠키 vs 세션

토큰

세션과 유사한 방식으로 사용되지만, 난수 형태의 문자열로 구성되어 있으며 데이터에 접근하는 사용자들에게 부여되어 접근을 허용하는 카드키 역할을 합니다.

토큰과 제일 많이 비교되는 대상은 세션입니다.
세션은 세션ID를 발급하여 사용자를 식별하였지만 토큰은 ID 대신 토큰을 발급하여 사용자를 식별합니다. 토큰 방식은 유효성을 확인 할 수만 있다면 유저의 인증을 별도로 분리할 수 있습니다.

특징

  1. 토큰은 서버에 사용자 상태 정보를 저장하지 않고, 모든 필요한 정보를 자체적으로 포함하므로 서버의 확장성을 향상시킵니다.
  2. 토큰은 암호화되어 클라이언트와 서버 간의 통신을 보호하며, 필요한 경우 사용자 권한과 역할 정보를 포함하여 보안을 강화할 수 있습니다.

동작방식

  1. 로그인과 토큰 발급 :
    사용자가 애플리케이션에 로그인하면 서버는 사용자의 신원을 확인하고, 유효한 로그인인 경우에는 토큰을 발급합니다. 이 토큰은 사용자를 인증하고, 사용자의 권한 등을 담을 수 있는 데이터를 포함합니다.

  2. 토큰 저장 및 전송 :
    발급된 토큰은 클라이언트(웹 브라우저 또는 앱)에 저장되거나, 요청 헤더 등을 통해 서버에 전송됩니다. 보통 HTTP 요청의 Authorization 헤더에 토큰을 넣어서 전송하는 방식을 사용합니다.

  3. 토큰 검증과 해석 :
    이 과정에서 토큰의 유효성, 만료 여부 등을 확인하며, 필요한 경우 토큰 내의 데이터(사용자 정보, 권한 등)를 해석하여 추출합니다.

  4. 인증과 권한 부여 :
    토큰이 유효하고 검증된 경우, 서버는 해당 토큰을 사용하여 사용자를 인증하고 필요한 권한을 확인합니다. 이를 통해 사용자에게 접근 권한을 부여하거나 거부합니다.

토큰 vs 세션

특성토큰세션
저장 위치클라이언트 (쿠키, 로컬 스토리지 등)서버
사용자 상태저장 여부서버에 사용자 상태 정보 저장X서버가 사용자 상태 정보 관리
유연성과 용도다양한 용도로 활용 가능 (JWT 등)주로 사용자 인증 및 상태 관리
만료토큰에 만료 시간 설정 가능세션 만료 및 로그아웃 가능
메모리 사용클라이언트 측에 저장되므로 서버 메모리에 영향 없음서버 측에 세션 정보가 저장되며, 메모리 사용

세 줄 정리(쿠키,세션,토큰,캐시)

쿠키

  1. 클라이언트(사용자의 브라우저)에 저장되는 작은 데이터 조각입니다.
  2. 쿠키는 사용자가 가지고 있어도 되는 정보만 저장한다.(ex, 검색내역, 팝업설정)
  3. 제 3자가 정보를 확인할 수도 있기 때문에 보안성에서는 제일 취약하다.

세션

  1. 사용자의 상태정보가 서버에 저장된다.
  2. 쿠키에 세션ID를 저장하여 사용자 정보를 확인한다.
  3. 한 번에 많은 이용자 접속시 메모리가 부족현상이 일어날 수 있습니다.

토큰

  1. 클라이언트에 저장된다.(쿠키, 로컬 스토리지)
  2. 다양한 용도로 사용이 가능하다.(JWT)
  3. 서버에 사용자의 상태정보를 저장하지 않기 때문에 서버의 확장성에 용이하고 메모리에 영향을 주지 않는다.

캐시

  1. 웹 페이지 요소(이미지, 스타일시트, 스크립트 등)를 저장하기 위한 임시 저장소입니다.
  2. 주로 웹 페이지 자원을 저장하는데 사용되며, 웹 페이지 성능 개선에 중점을 둡니다.
    (쿠키는 클라이언트와 서버 간의 상태 정보를 유지하거나 세션을 관리하는 데 사용됩니다.)
  3. 서버로 부터 데이터를 미리 저장해놓으면 데이터 로딩속도 빠르고 서버요청 횟수가 줄어든다.

[참고한 자료]

profile
부족함을 인정하고 채워나가는 개발자! (Node.js 개발자)

0개의 댓글