<aside> 💡 Authentication은 인증(서버의 유저인지), Authorization은 권한부여(특정한 행동 허용)
</aside>
쿠키: HTTP 프로토콜의 무상태성(Stateless)을 보완하는 도구. 상태 정보는 클라이언트에 저장하고, HTTP 요청 시 서버로 자동 전송됨. 보안에 취약. 용량은 4kb 정도로 제한. 주로 사용자 설정을 유지에 사용됨.
세션: 서버에서 클라이언트의 상태 정보를 유지하기 위한 방법. 서버는 클라이언트에 세션 ID를 부여하고, 쿠키에 담아서 클라이언트로 전달. 보안에 강하지만 서버 자원 소모하는 단점 있음. 주로 로그인 세션 유지에 사용됨.
토큰: 클라이언트 정보를 저장하는 인코딩된 문자열. 주로 JWT 형태로 사용. 서버는 토큰의 유효성만 검증하면 돼서 서버 자원 덜 사용. 서버에 상태 정보를 저장하지 않아서 확장성 높지만 토큰 탈취 위험 있음. 주로 OAuth 기반 인증에 사용됨.
Authentication과 Authorization 차이점
유저이름과 비밀번호를 서버에 보낸다
정보가 맞다면 서버는 세션 DB에 Smith라는 유저를 생성한다
해당 세션에는 별도의 ID를 가지고 있다
이 세션 ID는 쿠키를 통해 브라우저로 돌아오고 저장된다
그 후 같은 웹사이트의 다른 페이지로 이동하면 브라우저는 세션 ID가 담겨 있는 쿠키를 서버에 보낸다.
브라우저가 서버에 요청할 때 쿠키도 자동으로 보내진다
서버는 세션 ID가 담겨있는 쿠키를 확인하고
이때까지 서버는 요청을 보낸자가 누구인지 모른다
이 세션 ID로 세션 DB를 확인한고 해당 ID는 유저명 Smith의 것이란걸 알게된다.
이 요청이 끝나고 다른 페이지로 이동할 때마다 위 프로세스를 반복된다