[코드잇 스프린트🏃‍♂️ 풀스택 2기]위클리 페이퍼📝 10 : 세션 기반 인증과 토큰 기반 인증의 차이점

Anny·2024년 11월 3일
0

세션 기반 인증과 토큰 기반 인증의 차이점을 설명하세요. 어떤 상황에서 각각을 사용하면 좋을지 예를 들어 설명해 주세요.

0. 클라이언트-서버-DB

기본적으로 클라이언트 - 서버 - DB 방향으로 동작함.
즉, DB에서 클라이언트로 다이렉트하게 요청이나 응답을 전달하는게 아니라, 무조건 서버를 거쳐서 전달 되어야 한다.

1. 세션 기반 인증

1. 동작 순서

  1. 로그인 요청: 클라이언트는 서버에 아이디와 비밀번호를 POST로 요청.
  2. 유저 확인: 서버는 DB에서 유저 정보를 확인.
  3. 세션 생성: 인증에 성공하면 서버는 세션 ID를 생성하고 이를 서버 메모리에 저장. (이때 세션에는 유저의 정보가 담김)
  4. 세션 ID 전달: 서버는 생성한 세션 ID를 쿠키에 담아 클라이언트에 전달.
  5. 클라이언트 쿠키 저장: 클라이언트는 받은 세션 ID를 쿠키에 저장.
  6. 리소스 요청 시 세션 ID 전달: 클라이언트가 리소스를 요청할 때, 쿠키의 세션 ID를 함께 서버로 전송.
  7. 세션 데이터 확인: 서버는 세션 ID를 사용해 세션 데이터를 조회하고 유효성을 확인.
  8. 응답 전송: 유효한 세션이면 서버가 요청에 대한 응답 데이터를 클라이언트에 전송.

2. 서버의 부담이 크다는 단점

서버에서 계속 세션 ID를 핸들링하고, 유저의 상태를 관리해야 한다는 점에 있어서 서버의 부담이 상당 커짐.
만약 하나의 서버가 아닌 여러개의 서버가 사용된다면 서버 간 유저의 데이터 관리는 어떻게 처리해야 될지, 인증 과정에서 서버의 부담을 줄일 수 있는 방법을 줄이기 위한 방법으로 나온 방식이 토큰 기반 인증

2. 토큰 기반 인증

1. 동작 순서

  1. 로그인 요청: 클라이언트는 서버에 아이디와 비밀번호를 POST로 요청.
  2. 유저 확인: 서버는 DB에서 유저 정보를 확인.
  3. 토큰 생성: 인증에 성공하면 서버는 유저 정보를 바탕으로 토큰을 생성하고, 비밀키로 서명하여 유효성을 보장.
  4. 토큰 전달: 서버는 생성한 토큰을 Authorization 헤더에 담아 클라이언트에 전달.
  5. 토큰 저장: 클라이언트는 받은 토큰을 로컬 저장소나 세션 저장소 등에 저장.
  6. 리소스 요청 시 토큰 전달: 클라이언트가 리소스를 요청할 때 Authorization 헤더에 토큰을 포함해 서버로 전송.
  7. 토큰 유효성 검증: 서버는 받은 토큰을 비밀키로 검증.
  8. 응답 전송: 유효한 토큰이면 서버가 요청에 대한 응답 데이터를 클라이언트에 전송.

2. 클라이언트에서 인증 상태 관리

Authorization 헤더를 통해 클라이언트에서 유저의 인증 정보를 저장하고 관리하다보니, 서버가 부담감을 앉는다는 단점이 줄어듬.

3. 이 외의 장점

1. 서버의 무상태성
서버가 유저의 인증 상태를 기억하고 있을 필요가 없기 때문에 서버는 비밀키를 통해 토큰의 유효성 검사맞 진행하면 됨.
2. 확장성
하나의 토큰으로 다수의 서버에 인증이 가능하다 보니 기존의 세션 인증에서의 문제를 해결이 가능해짐
3. 토큰 생성의 역할 분리
토큰 검증을 하나의 서버에서만 이루지 않아도 되기 때문에 토큰 생성만 담당하는 서버를 따로 생성할 수 있음

3. 차이점

1. 장단점

1. 장점

1. 세션 기반 인증

  • 서버에서만 유저 인증 정보가 관리되기 때문에 보안성이 높음
  • 세션 만료 기간을 설정할 수 있어 유효성 관리가 쉬움.

2. 토큰 기반 인증

  • 서버는 클라이언트 인증 상태를 관리하지 않아도 됨. 따라서 서버의 무상태성을 유지하고 확장성이 뛰어남.
  • 토큰으로 다양한 서버에 인증을 통합할 수 있음.
  • 토큰 생성 서버와 검증 서버를 분리할 수 있어 확장성이 높아짐.

2. 단점

1. 세션 기반 인증

  • 서버가 모든 세션을 관리해야 하므로 부하가 큼
  • 특히 여러 서버 환경에서 세션 동기화 문제가 발생할 수 있음

2. 토큰 기반 인증

  • 토큰 탈취 시 인증이 유효한 동안 탈취자가 사용자처럼 행동할 수 있음.
  • 토큰이 클라이언트에 저장되므로 클라이언트 측 보안 관리를 철저히 해야 함.

2. 사용되기 적합한 환경

1. 세션 기반 인증

  • 중소형 웹 애플리케이션: 관리해야 할 유저가 적고, 인증 상태를 서버에서 지속 관리하기 편리할 때 사용.
  • 보안이 중요한 환경: 예를 들어 은행 등 민감한 데이터를 처리하는 애플리케이션. 세션이 서버에 저장되므로 사용자 인증 정보를 중앙에서 관리해 보안성이 높음.

2. 토큰 기반 인증

  • 다수의 서버가 필요한 대형 애플리케이션: 인증이 서버에 종속되지 않아 여러 서버 환경에서도 확장성이 높음.
  • 모바일 애플리케이션 또는 SPA(Single Page Application): 사용자가 로그인을 자주 하지 않고, 토큰만으로 간편하게 인증을 유지해야 하는 경우.
  • 외부 API 제공 서비스: 토큰을 통해 외부 애플리케이션에서 인증을 통합하여 사용할 수 있어, OAuth 같은 외부 인증과 통합이 쉬움.
profile
Newbie

0개의 댓글