서버가 클라이언트 인증을 확인하는 방식에는 대표적으로 쿠키 세션 토큰 3가지 방식이있음
쿠키
key - value 형식의 문자열 덩어리로
클라이언트가 웹사이트를 방문할 경우 그 웹사이트가 사용하고 있는 서버를 통해 클라이언트의 브라우저에 설치되는 기록정보 파일이다. 각 사용자마다 브라우저에 정보를 다르게 저장하여서 쿠키값으로 고유 정보 식별이 가능하다.

1.그림과 같이 브라우저가 서버에 요청(접속)을 보내면
2.서버는 클라이언트의 요청에 대한 응답을 할 때 , 클라이언트 측에 저장하고 싶은 정보를 응답하는 헤더의 쿠키에 정보를 담아서 클라이언트에게 보낸다
3.이후 쿠키값을 받은 클라이언트는 요청(접속)을 할 때마다 저장된 쿠키를 요청하는 헤더에 쿠키값으로 담아서 보내고 서버는 요청 헤더에 있는 쿠키 값을 분석해서 요청을 보낸 클라이언트가 누군지 식별하거나 맞춤형 정보를 제공하게 된다.
쿠키 방식의 단점
1.보안에 취약하다.
요청 시에 쿠키 값을 그대로 담아 보내기 때문에 거기에 담겨진 정보가 유출되거나 변조 될 위험이 크다.
2. 쿠키에는 용량제한이 존재하여 담을 수 있는 정보가 한정적이다.
3. 쿠키는 웹브라우저에 따라 지원하는 형태가 다르기 때문에 웹브라우저 간의 쿠키 공유가 불가능하다
4. 당연하지만 쿠키의 사이즈가 크면 네트워크에 부하가 있다
세션 인증
쿠키 방식의 보안적인 문제 때문에 세션은 비밀번호 등 클라이언트의 민감한 정보를 브라우저가 아닌 서버 측에서 저장하고 관리한다.(서버의 db 나 메모리 등) [쉽게 말해 브라우저(클라이언트)에게 민감한 정보를 맡기지 않고 전문가들이 직접 관리한다]
세션 객체는 key에 해당하는 SESSION ID 와 그에 상응하는 Value로 구성되어 있고

세션 인증방식
1. 유저가 웹사이트에 로그인 하여 유저에 대한 고유 세션 id 와 그에 대한 정보들이 서버에 저장이 된다.
2. 서버에서 브라우저에게 고유 세션Id를 담은 쿠키 값을 보내준다
3. 쿠키에 정보가 담겨 있는 브라우저는 해당 사이트에 요청(접속) 할 때 고유 세션id 가 들어 있는 쿠키를 포함해 요청을 보낸다.
4.서버는 클라이언트(브라우저)에게 받은 고유 세션 id와 서버에 저장되어 있는 고유 세션 id를 서로 비교 인증하여 그에 맞는 응답을 보내준다.
세션의 단점
쿠키를 포함한 요청이 외부에 노출되더라도 세션 ID 자체는 유의미한 개인정보를 담고 있지 않는다.
그러나 해커가 세션ID 자체를 탈취하여 클라이언트인척 위장할 수 있는 한계가 존재한다.
서버에서 세션 저장소를 사용하므로 요청이 많아지면 부하가 심해짐
토큰 기반 인증 시스템은 클라이언트가 서버에 접속을 하면 서버에서 해당 클라이언트에게 인증되었다는 의미로 '토큰'을 부여한다. 이 토큰은 유일하며 토큰을 발급받은 클라이언트는 또 다시 서버에 요청을 보낼 때 요청 헤더에 토큰을 심어서 보낸다. 그러면 서버에서는 클라이언트로부터 받은 토큰을 서버에서 제공한 토큰과의 일치 여부를 체크하여 인증 과정을 처리하게 된다.
기존의 세션기반 인증은 서버가 파일이나 데이터베이스에 세션정보를 가지고 있어야 하고 이를 조회하는 과정이 필요하기 때문에 많은 오버헤드가 발생한다. 하지만 토큰은 세션과는 달리 서버가 아닌 클라이언트에 저장되기 때문에 메모리나 스토리지 등을 통해 세션을 관리했던 서버의 부담을 덜 수 있다. 토큰 자체에 데이터가 들어있기 때문에 클라이언트에서 받아 위조되었는지 판별만 하면 되기 떄문이다.
토큰은 앱과 서버가 통신 및 인증할때 가장 많이 사용된다. 왜냐하면 웹에는 쿠키와 세션이 있지만 앱에서는 없기 때문이다.
HTTP는 대표적인 비연결 지향 프로토콜로 한번 요청-응답이 완료되면 연결이 종료되고 동일한 요청을 하더라도 새로 요청을 한것 마냥 새로 응답을 한다 이러한 관계를 없애기 위해서 세션이나 쿠키를 사용한다. 하지만 이러한 시스템은 인증에 필요한 특정 유저 정보를 서버 혹은 db 에 저장해야하는데 이는 서버나 db에 부담이 커진다. 이 때문에 서버에 정보를 저장하지 않는 토큰 이라는 인증 방식을 사용하는데 토큰은
토큰은 인증과 세션 관리에서 중요한 역할을 하는 보안 정보로 사용자가 로그인하면 서버에서 특정 데이터를 포함한 토큰이란 값을 생성하고 이 값을 클라이언트에 전달한다 이후 사용자(클라이언트)가 서버에 요청을 할때 이 토큰 값을 이용해 인증을 받게된다.