지난 포스팅에서는 쿠키와 세션에 대해서 중점적으로 알아보았습니다.
이번 포스팅에서는 토큰에 대해서 알아보고 토큰이 어떻게 쿠키,세션과 다른 차이점을 가지고 있는지 알아보겠습니다.
지난 포스팅 : 쿠키 vs 세션
세션과 유사한 방식으로 사용되지만, 난수 형태의 문자열로 구성되어 있으며 데이터에 접근하는 사용자들에게 부여되어 접근을 허용하는 카드키 역할을 합니다.
토큰과 제일 많이 비교되는 대상은 세션입니다.
세션은 세션ID를 발급하여 사용자를 식별하였지만 토큰은 ID 대신 토큰을 발급하여 사용자를 식별합니다. 토큰 방식은 유효성을 확인 할 수만 있다면 유저의 인증을 별도로 분리할 수 있습니다.
로그인과 토큰 발급 :
사용자가 애플리케이션에 로그인하면 서버는 사용자의 신원을 확인하고, 유효한 로그인인 경우에는 토큰을 발급합니다. 이 토큰은 사용자를 인증하고, 사용자의 권한 등을 담을 수 있는 데이터를 포함합니다.
토큰 저장 및 전송 :
발급된 토큰은 클라이언트(웹 브라우저 또는 앱)에 저장되거나, 요청 헤더 등을 통해 서버에 전송됩니다. 보통 HTTP 요청의 Authorization 헤더에 토큰을 넣어서 전송하는 방식을 사용합니다.
토큰 검증과 해석 :
이 과정에서 토큰의 유효성, 만료 여부 등을 확인하며, 필요한 경우 토큰 내의 데이터(사용자 정보, 권한 등)를 해석하여 추출합니다.
인증과 권한 부여 :
토큰이 유효하고 검증된 경우, 서버는 해당 토큰을 사용하여 사용자를 인증하고 필요한 권한을 확인합니다. 이를 통해 사용자에게 접근 권한을 부여하거나 거부합니다.
특성 | 토큰 | 세션 |
---|---|---|
저장 위치 | 클라이언트 (쿠키, 로컬 스토리지 등) | 서버 |
사용자 상태저장 여부 | 서버에 사용자 상태 정보 저장X | 서버가 사용자 상태 정보 관리 |
유연성과 용도 | 다양한 용도로 활용 가능 (JWT 등) | 주로 사용자 인증 및 상태 관리 |
만료 | 토큰에 만료 시간 설정 가능 | 세션 만료 및 로그아웃 가능 |
메모리 사용 | 클라이언트 측에 저장되므로 서버 메모리에 영향 없음 | 서버 측에 세션 정보가 저장되며, 메모리 사용 |
[참고한 자료]