본문 바로가기
개발자 기술 면접/기타 질문

[기타] 세션 기반 인증 방식과 토큰 기반 인증 방식의 차이

by se-black 2023. 12. 31.
세션 기반 인증 방식
  • 세션 기반 인증을 위해 Session 과 Cookie 가 사용됩니다.
  • 다음 Flow로 인증 절차가 진행됩니다.
  1. 유저가 로그인을 하고 세션이 서버 메모리 상에 저장됩니다. 이 때 세션을 식별하기 위한 Session Id를 기준으로 정보를 저장합니다.
  2. 브라우저에 쿠키로 Session Id가 저장됩니다.
  3. 쿠키에 정보가 담겨있기 때문에 브라우저는 해당 사이트에 대한 모든 Request마다 HTTP Cookie Header에 Session Id를 담아 전송합니다.
  4. 서버는 클라이언트가 보낸 Session Id와 서버 메모리로 관리하고 있는 Session Id를 비교하여 Verification을 수행합니다.
세션 기반 인증 방식 장단점
  • 장점
    • 세션 기반 인증 방식은 구현이 상당히 명확하다는 장점이 있습니다. 또한 실제 서버에서 로그인 상태 확인이 굉장히 유용합니다.
    • 상대적으로 안전합니다. 서버 측에서 관리하기 때문에 클라이언트 변조에 영향받거나 데이터의 Stale(손상) 우려가 없습니다.
  • 단점
    • 서버에서 관리하기 때문에, 세션 저장소를 따로 이용하기에 요청이 많아지면 많아질수록 서버 부하가 심해집니다.
    • 멀티 디바이스 환경에서 로그인 시 신경써줘야 할 부분들이 생깁니다.

토큰 기반 인증 방식
  • Token 기반 인증의 방법으로 많은 웹 서버들은 JWT(JSON Web Token)를 사용합니다.
  • Token 기반 인증 방식과 Session 기반 인증 방식의 가장 큰 차이점은 유저의 정보가 서버에 저장되지 않는다는 점입니다.
  • 다음 Flow 로 인증 절차가 진행됩니다.
  1. 세션 기반 인증 방식은 유저가 로그인을 하고 서버에 세션을 이용해서 인증 정보를 기록하는 대신, 토큰 기반 인증 방식은 Token 을 발급합니다.
  2. 클라이언트는 발급된 Token 을 저장합니다. (일반적으로 local storage 에 저장합니다.)
  3. 클라이언트는 요청 시 저장된 Token 을 Authorization Header 에 포함시켜 보냅니다.
  4. 서버는 매 요청 시 클라이언트로부터 전달받은 헤더의 Token 정보를 Verification 한 뒤, 해당 유저에 권한을 인가합니다.
토큰 기반 인증 방식 장단점
  • 장점
    • 클라이언트에 저장되기 때문에 서버의 메모리에 부담이 되지 않으며 Scale에 있어 대비책을 고려할 필요가 없습니다.
    • 멀티 디바이스 환경에 대한 부담이 없습니다.
  • 단점
    • 이미 발급된 JWT를 돌이킬 수 없습니다.
    • 세션 기반 인증 방식처럼 저장소를 사용하는 경우에는 해당 세션이 악의적으로 사용될 경우 지워버리면 되지만, JWT는 한 번 발급되면 유효기간이 만료될 때까지는 계속 사용이 가능합니다.
    • JWT의 길이가 길어지면 많은 네트워크 트래픽의 사용으로 네트워크 부하가 발생합니다.

※ 요약 ※
  • 세션 기반 인증(Session-Based Authentication)
    • 세션 기반 인증은 서버 에서 사용자 상태를 유지하고 관리하는 방식입니다. 일반적으로 웹 애플리케이션에서 사용됩니다.
    • 사용자가 로그인하면 서버는 사용자에 대한 세션을 생성하고 고유한 세션 ID를 할당합니다. 이 세션 ID는 서버 측에 저장되거나 데이터베이스에 저장됩니다.
    • 사용자가 애플리케이션에서 요청을 보낼 때마다 세션 ID를 함께 전송하며, 서버는 세션 ID를 사용하여 사용자를 식별하고 해당 세션에서 사용자 상태를 유지합니다.
    • 로그아웃하거나 세션이 만료되면 사용자는 다시 로그인해야 합니다.
  • 토큰 기반 인증(Token-Based Authentication)
    • 토큰 기반 인증은 세션 기반 인증과 달리 상태를 서버에 저장하지 않고 클라이언트 측에서 상태를 관리합니다.
    • 사용자가 로그인하면 서버는 사용자에게 액세스 토큰과 종종 리프레시 토큰을 발급합니다. 액세스 토큰은 사용자를 인증하는데 사용되며, 리프레시 토큰은 새로운 액세스 토큰을 발급받기 위해 사용됩니다.
    • 클라이언트는 액세스 토큰을 각 요청의 헤더 또는 요청 매개변수로 전달하여 서버에 요청합니다. 서버는 이 토큰을 검증하고 사용자를 인증합니다.
    • 토큰은 클라이언트 측에서 저장되므로 서버의 상태를 유지할 필요가 없습니다. 이로써 서버의 확장성이 향상됩니다.
728x90