인증 방식 종류(쿠키,세션,토큰)

쿠키

Key, Value형식의 문자열 클라이언트가 웹사이트에 방문할 경우, 그 사이트가 사용하고 있는 서버를 통해 클라이언트 브라우저에 설치되는 작은 기록 정보 파일 각 사용자마다 브라우저에 저장하니 고유 식별이 가능하다.

단점 : 요청 시 쿠키의 값을 그대로 보내기 때문에 유출 및 조작 당할 위험이 존재

세션

쿠키의 보안적 이슈때문에, 비밀번호 등 클라이언트의 민감한 정보를 브라우저 측이 아닌 서버에 저장하고 관리

서버의 메모리에 저장하기도 하고, 서버의 로컬 파일이나 데이터베이스에 저장하기도 한다.

토큰

앱과 서버 통신 및 인증할떄 많이 사용

why? 웹에는 쿠키와 세션이 있지만 앱에는 없다.

토큰 기반 인증 시스템은 클라이언트가 서버에 접속을 하면 서버에서 해당 클라이언트에게 인증되었다는 의미로 ‘토큰’을 부여. 이 토큰은 유일하며 토큰을 발급받은 클라이언트는 또 다시 서버에 요청을 보낼 때 요청 헤더에 토큰을 심어서 보낸다. 그러면 서버에서는 클라이언트로부터 받은 토큰을 서버에서 제공한 토큰과의 일치 여부를 체크하여 인증 과정을 처리.

기존의 세션기반 인증은 서버가 파일이나 데이터베이스에 세션정보를 가지고 있어야 하고 이를 조회하는 과정이 필요하기 때문에 많은 오버헤드가 발생한다. 하지만 토큰은 세션과는 달리 서버가 아닌 클라이언트에 저장되기 때문에 메모리나 스토리지 등을 통해 세션을 관리했던 서버의 부담을 덜 수 있다. 토큰 자체에 데이터가 들어있기 때문에 클라이언트에서 받아 위조되었는지 판별만 하면 되기 떄문이다.

서버 기반 vs 토큰 기반

서버(세션) 기반 인증 시스템 서버의 세션을 사용해 사용자 인증을 하는 방법으로 서버측(서버 램 or 데이터베이스)에서 사용자의 인증정보를 관리하는 것을 의미한다. 그러다 보니, 클라이언트로부터 요청을 받으면 클라이언트의 상태를 계속에서 유지해놓고 사용한다. 사용자가 증가함에 따라 성능의 문제를 일으킬 수 있으며 확장성이 어렵다는 단점을 지닌다.

토큰 기반 인증 시스템 이러한 단점을 극복하기 위해서 “토큰 기반 인증 시스템”이 나타났다. 인증받은 사용자에게 토큰을 발급하고, 로그인이 필요한 작업일 경우 헤더에 토큰을 함께 보내 인증받은 사용자인지 확인한다. 이는 서버 기반 인증 시스템과 달리 상태를 유지하지 않는다.

Payload 자체는 암호화되지 않기 때문에 유저의 중요한 정보는 담을 수 없다. 토큰을 탈취당하면 대처하기 어렵다.

따라서 사용 기간 제한을 설정하는 식으로 극복한다.