세션 기반 로그인 방식은 웹 애플리케이션에서 널리 사용되어왔던 방식이다.
서버는 사용자가 로그인할 때 세션을 생성하고, 이 세션 정보를 세션 저장소에 저장한다. 사용자는 이 세션ID를 가진 쿠키를 잔달받아, 이후의 요청에서 로그인 되있음을 인증한다.
세션은 서버에 저장되기 때문에, 그에 대한 관리 권한은 서버에있다. 덕분에 만약 비정상적인 사용자의 움직임을 포착했을 경우 서버 관리자는 그 즉시 해당 세션을 만료시킬 수 있다.
반면에 세션에 대한 관리 또한 서버측에서 해야함으로 모든 요청에 대한 세션 검증작업이 필요하다. 이는 데이터 베이스에 부하를 일으킬 수 있으며, 만약 DB 세션저장소가 아닌 메모리 저장소를 사용하는 경우에는 서버메모리 부담, 로드 밸런싱 문제, 서버 장애 대응 문제 등 여러가지 한계가있다.
토큰은 변조할 수 없는 인증 파일이다. 이는 secretKey를 사용해서 서버단에서 생성되고, 사용자 로컬환경에 저장된다. 사용자는 이 토큰을 포함한 request를 통해 로그인 되었음을 인증한다.
서버는 사용자의 요청을 승인하기 위해 모든 세션 세부 정보를 지속적으로 체크할 필요가 없기 때문에 성능을 향상시킬 수 있다.
그러나 토큰은 사용자에 저장됨으로, 세션방식과 같은 특정 보안 작업을 수행하기 어렵다. 때문에 공격자가 유효한 토큰을 얻으면 서버 자원에 무한정 접근할 수 있기 때문에 토큰의 만료 기간을 짧게 설정하는 경우가 많다.
출처
https://www.geeksforgeeks.org/session-vs-token-based-authentication/
https://mangkyu.tistory.com/55