본문 바로가기
Spring/Spring-Security

세션(서버) 기반 VS 토큰 기반 차이

by YoonJong 2022. 10. 19.
728x90

인증 (Authentication) : 사용자가 맞는지 확인 -> 로그인

인가 (Authorization) : 권한부여 -> 자신이 작성한 글 확인 등 ( 인증 이후 )

 

1. 세션기반 인증 

세션 기반 인증은 서버 기반의 인증방식이다.

따라서 서버 측에서 사용자들의 정보를 기억하고 있어야 하므로 stateful 한 구조를 갖는다.

 

사용자들의 정보를 기억하기 위해서는 사용자의 정보를 메모리에 저장한다.

클라이언트는 쿠키저장소에 서버로부터 받은 SessionID 를 저장한다.

 

장점으로는,

토큰방식처럼 signiture 등등 부가적인 정보가 없기 때문에, 주고받는 데이터가 적다

 

단점으로는,

서버에서 직접 정보를 저장하기 때문에, 정보를 저장하는데 한계가 있다.

하드디스크나 DB에 저장하기에는 작업이 느리고, 무거워 진다.

서버가 늘어나게 되면 세션을 분산시켜야하는데, 해당 과정은 어렵고 복잡해 확장성이 어렵다

여러 도메인에서 관리하는 것은 번거롭다( 도메인확장이 어렵다 )


2. 토큰기반 인증

인증받은 사용자들에게 토큰을 발급하고, 서버에 요청할 때 헤더에 토큰을 함께 보내 유효성 검사를 진행한다.

세션기반과 달리 인증정보를 서버에 유지하지 않고, 클라이언트가 요청할 때 보낸 요청의 헤더만 검사할 수 있어 Stateless 구조를 갖는다.

 

장점으로는,

클라이언트에 토큰정보가 저장되기 때문에 서버는 무상태성(Stateless)을 갖는다.

OAuth 인증방식에서 효율적으로 사용할 수 있다.

토큰을 사용하면, 어떤 도메인에서든 토큰의 유효성 검사를 진행한 후 요청을 처리할 수 있다. 

다양한 도메인에 대응하는데 부담이 적다.

메모리의 부담을 줄일 수 있다.

 

단점으로는,

토큰의 발급시각, 만료시각, ID 등 부가적인 데이터가 많아 세션보다 많은 트래픽을 사용한다.

상태를 기억하지 않기때문에 통제가 불가능하다.

세션은 세션무효화를 통해 보안에 대비할 수 있지만, 토큰은 이러한 보안작업이 없다.

 -> access 토큰은 짧게 , refresh 토큰은 길게 발급해서 access 토큰이 해킹당하더라도 빠르게 만료되어 차단하고, refresh 토큰을 통해 새롭게 access 토큰을 발급받는 방법을 사용해 단점을 보완할 수 있다.

 

 

 

 

 

 

참고

https://hudi.blog/session-based-auth-vs-token-based-auth/

 

세션 기반 인증과 토큰 기반 인증 (feat. 인증과 인가)

인증과 인가 세션기반 인가와 토큰기반 인가에 대해 알아보기 이전에 먼저, 인증과 인가가 무엇인지 부터 알아야할 필요가 있다. 인증과 인가를 같거나 비슷한 개념이라고 생각하는 사람들이

hudi.blog

https://mangkyu.tistory.com/55

 

[Server] 토큰 기반 인증 VS 서버(세션) 기반 인증

기존의 시스템에서는 서버 기반의 인증방식을 사용하였다. 하지만 시스템의 규모가 커짐에 따라 서버 기반의 인증 방식은 한계점을 보이기 시작하였고, 토큰 기반의 인증 방식이 등장하게 되었

mangkyu.tistory.com

https://velog.io/@jun7867/%EC%84%B8%EC%84%A0-%EA%B8%B0%EB%B0%98-%EC%9D%B8%EC%A6%9D%EA%B3%BC-%ED%86%A0%ED%81%B0-%EA%B8%B0%EB%B0%98-%EC%9D%B8%EC%A6%9DJWT-%EC%B0%A8%EC%9D%B4%EC%A0%90

 

세선 기반 인증과 토큰 기반 인증(JWT) 차이점

세션 기반 인증과 토큰 기반 인증에 대해서 알아보자

velog.io

 

728x90

댓글