Jwt // 세션 인증 차이점
두 방식의 가장 큰 차이점은 jwt는 서버에 인증 정보를 저장하지 않는다는 점입니다. 그렇기 대문에 클라이언트의 요청마다 인증을 위해 DB를 탐색하는 과정이 필요하지 않고, 저장 공간도 필요하지 않습니다.
Jwt(토큰기반 인증)
세션 기반 인증이 인증 정보를 서버에 저장하는 방식이라면, 토큰 기반 인증은 인증 정보를 클라이언트가 직접 들고 있는 방식이다. 이때 인증 정보가 토큰의 형태로 브라우저의 로컬 스토리지(혹은 쿠키)에 저장된다.
토큰 기반 인증에서는 사용자가 가지고 있는 토큰을 HTTP 의 Authorization 헤더에 실어 보낸다. 이 헤더를 수신한 서버는 토큰이 위변조 되었거나, 만료 시각이 지나지 않은지 확인한 이후 토큰에 담겨있는 사용자 인증 정보를 확인해 사용자를 인가한다.
세션기반 인증
세션기반 인가는 사용자의 인증 정보가 서버의 세션 저장소에 저장되는 방식이다. 사용자가 로그인을 하면, 해당 인증 정보를 서버의 세션 저장소에 저장하고, 사용자에게는 저장된 세션 정보의 식별자인 Session ID를 발급한다. 발급된 Session ID는 브라우저에 쿠키 형태로 저장되지만, 실제 인증 정보는 서버에 저장되어 있다.
브라우저는 인증 절차를 마친 이후의 요청마다 HTTP Cookie 헤더에 Session ID 를 함께 서버로 전송한다. 서버는 요청을 전달받고, Session ID에 해당하는 세션 정보가 세션 저장소에 존재한다면 해당 사용자를 인증된 사용자로 판단한다.
세션 장점
사이즈- 세션의 경우 Cookie 헤더에 세션 ID만 실어 보내면 되므로 트래픽을 적게 사용한다. JWT는 사용자 인증 정보와 토큰의 발급시각, 만료시각, 토큰의 ID등 담겨있는 정보가 세션 ID에 비해 비대하므로 세션 방식보다 훨씬 더 많은 네트워크 트래픽을 사용한다.
안전성과 보안성- 세션의 경우 모든 인증 정보를 서버에서 관리하기 때문에 보안 측면에서 조금 더 유리하다. 설령 세션 ID가 해커에게 탈취된다고 하더라도, 서버측에서 해당 세션을 무효 처리하면 된다.
하지만 JWT토큰의 경우 그렇지 않다. 토큰은 서버가 트래킹하지 않고, 클라이언트가 모든 인증정보를 가지고 있다. 따라서 토큰이 한번 해커에게 탈취되면 해당 토큰이 만료되기 전까지는 속수무책으로 피해를 입을 수 밖에 없다.
JWT 특성상 토큰에 실린 Payload가 별도로 암호화 되어있지 않으므로, 누구나 내용을 확인할 수 있다. 따라서 Payload에 민감한 데이터는 실을 수 없다. 즉, Payload 에 실을 수 있는 데이터가 제한된다.
하지만 세션과 같은 경우에는 모든 데이터가 서버에 저장되기 때문에 아무나 함부로 열람할 수 없으므로 저장할 수 있는 데이터에 제한이 없다.
토큰 장점
확장성 - 서버 확장방식은 수평확장이고 한대가 아닌 여러대의 서버가 요청을 처리하게 된다. 때문에 세션 인증 방식은 세션 불일치 문제를 겪게 된다.
토큰기반 인증 방식은 클라이언트가 저장하는 방식이라 세션 불일치 문제로부터 자유롭고 Http의 비상태성(stateless)을 그대로 활용할 수 있고, 따라서 높은 확장성을 가질수 있다.
서버의 부담이 없음 - 유저의 수가 얼마나 되던 서버의 부담 증가x
'프론트엔드 > 리액트' 카테고리의 다른 글
리액트: 데이터 업데이트시 얕은 복사를 쓰는 이유 (0) | 2023.05.25 |
---|---|
리액트에서 useQuery를 사용하는 이유 & 예시 (0) | 2023.04.28 |
리액트로 json server 만들기 (1) | 2023.04.20 |
리액트로 도넛모양차트 하이차트, +annotation 옵션 구현 (0) | 2023.04.13 |
리액트로 이미지 다운로드(html-to-image) (0) | 2023.04.10 |