프론트엔드

세션 기반 인증과 토큰 기반 인증의 차이

학습하는 청년 2024. 6. 15. 11:12

최종 수정 : 2024-06-15

서버(세션) 기반 인증

서버 측에서 사용자의 정보를 세션에 저장하여 기억하는 방식으로 메모리, 디스크, 데이터베이스 등을 통해 관리를 한다. ㅇ예를 들어, 로그인을 하면 세션에 사용자 정보를 저장하고 사용자 정보가 필요한 서버를 제공할 때 사용하곤 하는 방식이며, 이를 Statfull 서버라 한다.

 

서버(세션) 기반 인증은 세션(session)과 쿠키(Cookie)가 사용되며 아래와 같은 인증 절차가 진행된다.

 

# 장점

  • 서버에서 세션정보가 관리되므로 상대적으로 안전하다.
  • 서버에 세션정보가 있기 때문에 상태 여부를 확인하기 수월하다.

# 단점

  • 서버 확정서의 어려움이 있다.
  • 메모리 / 데이터베이스의 과부화로 성능에 영향을 준다.

토큰 기반 인증

서버는 인증받은 사용자에게 톸는을 발급, 클라이언트에서는 이 토큰을 저장하여 서버로 서비스 요청 시 헤더에 토큰을 실어 보내 유효성 검사를 하는 인증 방식이다. 서버에 클라이언트 정보를 저장하지 않으므로 Stateless 서버라 한다.

 

토큰 생성 및 인증 절차는 다음과 같다.

# 장점

  • 서버에 저장되지 않아 메모리 / 데이터베이스 성능에 양향이 적고 서버 확장에 용이하다.
  • 토큰을 이용하여 로그인 정보가 다른 분야로 확장하여 이용할 수 있도록 하는 데 용이하다.
    (ex. Google, Fackbook 등등의 계정으로 로그인 처리)
  • 여러 플랫폼 및 도메인에서 토큰을 이용한 검증이 가능하여, 여러 디바이스나 도메인에서 인증이 가능하다.

# 단점

  • 토큰의 길이가 길어져 네트워크 대욕폭에 대한 낭비가 존재한다.
  • 토큰 발생 시 사용되는 Signature 정보만 맞으면 맞는 토큰으로 인식하기에 한번 발급된 토큰의 정보를 바꾸는 게 불가능하다.
  • 단순 Base64로만 인코딩되기 때문에 토큰이 불법적으로 취득되면 사용자 정보가 노출된 가능성이 있다.
    --> 그러나, 이를 보완하는 방법으로 JWE 방식을 통해 토큰 자체를 암화할 수 있다.

참고 자료

https://m.blog.naver.com/kevinjjun/222505335357

 

서버(세션) 기반 인증 vs 토큰 기반 인증

1. 서버(세션) 기반 인증 · 서버 측에서 사용자, 즉 클라이언트의 정보를 세션에 저장하여 기억하는 방식으...

blog.naver.com