web_Token & Session

윤일권·2024년 3월 17일
0

WEB

목록 보기
1/1
토이프로젝트와 인턴생활 중 OAuth 소셜 계정 서비스에 대해 동시에 다루고 있다.
구현하는 환경이 다르지만 Token과 Session에 대해 같이 다루고 있었다.
Token과 Session이 어떤 것인지 개념과 동작에 대해 알고 있지만 
명확하게 한번 더 정리할 필요가 느껴 포스팅해보기로 하였다.

인증&인가

들어가기 앞서 인증과 인가에 대해 간단하게 훑어보고 가자.

인증(Authentication)

  • 사용자가 자신이 주장하는 바를 증명하는 과정.
  • 사용자가 시스템에 접근하려 할 때, 그 사용자가 누구인지를 확인하는 절차.
  • 방식
    • 다요소 인증 (Multi-factor Authentication, MFA): 비밀번호 외에도, 사용자는 추가적인 증거(예: 문자 메시지를 통해 받은 코드, 바이오메트릭 정보)를 제공
    • 바이오메트릭 인증: 지문, 얼굴 인식, 홍채 스캔과 같은 생체 정보를 이용한 인증 방법.
  • 토큰 기반 인증: 사용자는 시스템에 접근하기 위해 디지털 토큰(예: 스마트 카드, RFID 태그)을 사용.

인가 (Authorization)

  • 인증된 사용자가 시스템 내에서 수행할 수 있는 작업을 결정하는 과정
  • 사용자가 무엇을 할 수 있는지를 결정
  • 방식
    • 역할 기반 접근 제어 (Role-Based Access Control, RBAC): 사용자의 역할에 따라 시스템 자원에 대한 접근 권한을 제어
  • 속성 기반 접근 제어 (Attribute-Based Access Control, ABAC): 사용자의 속성(예: 나이, 부서, 직책)에 따라 접근 권한을 결정.
  • 임의 접근 제어 (Discretionary Access Control, DAC): 자원의 소유자가 접근 권한을 직접 관리.

Token

정의

  • 토큰 기반 인증은 서버가 클라이언트에게 제공하는 인증된 사용자의 신원을 나타내는 디지털 토큰을 사용.

동작 원리

  1. 사용자가 로그인 정보를 제출합니다.
  2. 서버는 정보를 확인하고, 맞다면 암호화된 토큰을 생성하여 클라이언트에게 전달합니다.
  3. 클라이언트는 이 토큰을 저장하고, 이후의 모든 요청에 토큰을 함께 전송합니다.
  4. 서버는 토큰을 검증하고, 유효하면 요청된 작업을 수행합니다.

장점

  • 토큰은 클라이언트 측에 저장되기 때문에, 서버는 상태를 유지할 필요가 없어 부하가 감소합니다.
  • 스케일 아웃이 용이하며, 분산 시스템 환경에서 효율적입니다.
  • 토큰에 유효 기간을 설정할 수 있어 보안성을 높일 수 있습니다.

단점

  • 토큰이 탈취되면, 유효 기간이 종료될 때까지 보안 위협이 될 수 있습니다.
  • 토큰 크기가 커질 수 있으며, 이는 네트워크 오버헤드를 증가시킬 수 있습니다.

구현 예시

JWT는 헤더, 페이로드, 시그니처의 세 부분으로 구성되며, 각 부분은 점(.)으로 구분됩니다. 서버는 사용자 인증 정보를 기반으로 JWT를 생성하고, 이를 사용자에게 전달합니다. 클라이언트는 요청 헤더에 JWT를 포함시켜 서버에 보냅니다.

Session

정의

  • 세션은 사용자가 웹 애플리케이션을 사용하는 동안 서버 측에서 유지하는 상태 정보.

동작원리

  1. 사용자가 로그인 정보(예: 사용자명과 비밀번호)를 입력하여 로그인을 시도합니다.
  2. 서버는 정보를 확인하고, 맞다면 고유한 세션 ID를 생성합니다.
  3. 생성된 세션 ID는 클라이언트에게 전달되고, 클라이언트는 이를 쿠키 등에 저장합니다.
  4. 이후 클라이언트의 요청마다 이 세션 ID를 서버에 전달하고, 서버는 세션 ID로 사용자를 인식합니다.
  5. 사용자가 로그아웃하거나 세션이 만료되면, 세션은 서버에서 삭제됩니다.

장점

  • 상태 정보가 서버에 저장되기 때문에, 클라이언트의 변조로부터 안전합니다.
  • 사용자 인증 정보를 서버에 저장하기 때문에, 비교적 안전한 인증 방법을 제공합니다.

단점

  • 많은 사용자가 동시에 시스템을 사용할 경우, 서버에 부담을 줄 수 있습니다.
  • 세션 정보가 서버에 종속되어 있어, 분산 시스템 환경에서 관리가 복잡해질 수 있습니다.

구현 예시

웹 서버가 PHP, Node.js, Java 등을 사용하여 세션 관리 기능을 구현할 수 있습니다. 예를 들어, PHP에서는 session_start() 함수를 호출하여 세션을 시작하고 $_SESSION 전역 변수를 통해 세션 데이터를 저장하고 접근할 수 있습니다.

profile
생각하는 개발자가 되겠습니다!!

0개의 댓글