[FE/Web] 세션 기반 인증 vs 토큰 기반 인증

배고픈 배극곰·2024년 2월 6일
0

기술면접

목록 보기
18/26

세션 기반 인증 방식과 토큰 기반 인증 차이는요?

💸세션 기반 인증

세션 기반 인가는 사용자의 인증 정보가 서버의 세션 저장소에 저장되는 방식.

그리고 클라이언트에는 저장된 세션정보의 Session ID를 발급한다.

발급된 Session ID는 브라우저에 쿠키 형태로 저장.

(실제 인증 정보는 서버에 저장되므로, 보안 측면에서 안전하다는 장점)

인증 이후, 그다음 API요청시마다 Cookie에 Session ID를 담아 함께 서버로 전송한다.

서버는 받은 request에서 Session ID를 꺼내, 세션 저장소에 있는 정보인지 로직을 거친후 인증된 사용자인지 판단한다.

 🍪토큰 기반 인증

인증 정보를 토큰 형태로 클라이언트에서 직접 관리하는 방식. (널리 사용되는 방식 JWT)

\=> 브라우저 저장소 (로컬스토리지, 쿠키 등)에 저장됩니다.

그리고 클라이언트에서 인증 후 API 요청시, 해당 토큰을 Request 헤더이 Authorization에 실어서 보낸다.

\=> 서버에서 토큰 위변조 검증 및 만료시간 체킹 후 사용자 인증 정보를 확인해 사용자를 인가한다.

(Node.js와 Nest.js 프로젝트 다룰때, jsonwebtoken 라이브러의 verify()함수를 이용해서 토큰 유효성을 검증했었던 것이 떠올랐다.)

JWT의 경우 디지털 서명이 존재해 토큰내용의 위변조 여부를 서버에서 판별할수있다.

[##Image|kage@7Ljfv/btsHnUpKR3v/6R2KJQLQb60REOy2kPCre0/img.png|CDM|1.3|{"originWidth":921,"originHeight":831,"style":"alignLeft","width":378,"height":341}##]

\=> 이렇게 Header, Payload, Verfiy Signature 3파트로 나누어져있다.

세션 vs 토큰 장단점

세션

모든 인증 정보를 서버에서 관리하므로 보안 측면에서 유리하다는 장점이있지만,  단점으로는 서버 과부하가 걸릴 수 있고

분산된 서버 환경에서 세션 공유하기가 어렵다.

토큰

토큰의 경우, 가장 큰 장점은 확장성이다.

일반적으로 서버 확장 방식은 수평확장을 사용하기 때문에, 분산된 여러 서버 환경에서 요청을 처리한다고 했을때

토큰기반 인증방식의 경우 HTTP의 stateless 특징을 그대로 활용할 수 있으므로, 서버 확장성이 높다고 할수잇따.

하지만 토큰이 탈취되면, 보안 문제에 취약하다는 단점이 있따.

cf. 인증, 인가

인증은 클라이언트가 들고온 인증정보에 해당되는 사용자가 맞는지를 검증하는 과정. ( 로그인 )

인가는 인증 작업이후, 인증된 사용자에 대한 자원 접근 권한 부여

cf. HTTP의 비상태성

서버는 클라이언트의 상태를 저장하지 않는다. 

즉, http는 바로 직전 발생한 통신을 기억하지 못하므로, 이전 요청과 다음요청의 맥락이 이어지지 않는다.

(그렇다고, 매번 해당 게시글 작성, 수정할때마다 로그인을 요청할수는 없으므로)

\=> 이러한 HTTP 환경에서 서버가 사용자를 "인가"하는 방법?

\=> 이것이 바로 지금까지 살펴본 세션, 토큰을 사용한 인가 방식이다.

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

profile
마부작침 형설지공

0개의 댓글