서버 기반 인증 시스템 ( Session / Cookie )
- 서버 기반 인증 시스템은 로그인 시 세션 ID를 클라이언트에게 발급 하고 클라이언트는 요청마다 ID가 담긴 쿠키를 헤더에 담아 보내는 방식이다. 상태를 유지해야 하므로
Stateful한 구조
를 가지고 있다.
인증 방식
- 사용자가 로그인 시 올바른 사용자임을 확인하고, 고유한 세션 ID 값을 부여해 세션 저장소에 저장하고 클라이언트에 발급한다.
- 클라이언트는 세션 ID를 받아서 쿠키에 저장하고, 인증이 필요한 요청마다 쿠키에 세션 ID를 담아 헤더에 실어 보낸다.
- 서버에서는 쿠키를 받아서 세션 저장소와 비교해 올바른 요청인지 확인한다.
- 인증이 완료되고 서버는 요청에 응답한다.
장/단점
장점
- 중요한 정보가 서버에 있어 쿠키 자체는 유의미한 값을 가지고 있지 않다.
단점
- 쿠키값 자체가 의미가 없다는 것이 안전하다는게 아님, 해커가 훔친 쿠키를 이용해서 HTTP 요청을 보내면 서버에서는 올바른 사용자가 보낸 요청인지 알 수 없음. (세션 하이재킹 공격)
- 세션을 저장해야 하므로 사용자가 늘어날 경우 서버의 RAM에 부하가 걸리게 된다. 이를 피하기 위해 데이터 베이스에 저장하기도 하는데 이 역시 데이터베이스에 부하를 줄 수 있다.
- 시스템 확장(Scale-Out)이 어렵다
토큰 기반 인증 시스템 ( JWT )
- 토큰기반 인증 시스템은 로그인 시 토큰을 발급하고 서버에 요청을 할 때 HTTP 헤더에 토큰을 함께 보내도록 하여 유효성을 검증하는 방식이다.
- 사용자의 인증 정보를 더 이상 서버에 저장하지 않고 클라이언트의 요청으로만 인가를 처리할 수 있으므로
Stateless 한 구조
를 가진다.
- 서버 기반 인증 시스템과 가장 큰 차이점으로 세션 저장소에 유저의 정보를 넣는 반면 토큰 기반 인증 시스템은 토큰 안에 유저의 정보를 넣는다.
장단점
장점