Notice
Recent Posts
Recent Comments
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Today
Total
관리 메뉴

충분히 쌓여가는

Session 기반 인증 | Token 기반 인증 본문

IT/Computer Science

Session 기반 인증 | Token 기반 인증

빌드이너프 2023. 1. 6. 11:23
더보기

Session 기반 인증 | Token 기반 인증을 알기 전에 인증(Authentication)과 인가(Authorization)에 대해 먼저 알아보고자 함

인증과 인가가 비슷하게 들릴 수 있지만 IAM(Identity and Access Management) 환경에서는 명확히 구분되는 보안 프로세스

 

인증(Authentication)

  • 사용자의 신원확인
  • 인증은 사용자의 신원을 검증하는 행위로서 보안 프로세스에서 첫 번째 단계

인증 프로세스

  • 비밀번호: 사용자 이름과 비밀번호는 가장 많이 사용되는 인증 요소, 사용자가 데이터를 올바르게 입력하면 시스템은 아이덴티티가 유효하다고 판단하고 액세스를 허용함
  • 일회용 핀: 단일 세션이나 트랜잭션에 한하여 액세스를 허용함
  • 인증 앱: 액세스를 허용하는 외부 기관을 통해 보안 코드를 생성함
  • 생체인식: 사용자가 시스템에 액세스하기 위해 지문이나 망막 스캔을 제출함
더보기

상황에 따라 인증 요소를 2가지 이상 성공적으로 확인해야만 시스템에 액세스할 수 있는 경우 발생

-> 다중 요소 인증(MFA) 요건이 배포되어 비밀번호의 한계를 넘어 보안을 강화하는 경우도 많음


인가(Authorization)

  • 사용자에게 특정 리소스나 기능에 액세스할 수 있는 권한을 부여하는 프로세스
  • 서버에서 특정 파일을 다운로드할 수 있는 권한을 부여, 개별 사용자에게 관리자 권한으로 애플리케이션에 액세스할 수 있는 권한을 부여하는 경우
  • 권한 인증은 항상 인증 이후에 진행되어야 함

인증(Authentication)과 인가(Authorization)의 비교

더보기

집을 오래동안 비워 화초를 관리해야하는 상황

집 열쇠: 인증(Authentication) - 자격 증명을 정확하게 입력하는 사용자

출입허가에 대한 인증: 화초 영양제가 들어있는 창고를 열 수 있는 권한 인증 받게됨, 하지만 화초와 관련없는 소파에 누워 쉴 권한 없음

화초 주인은 집에 들어갈 수 있는 권한(인증) 존재, 특정 영역에 접근할 수 있음(권한 인증)

  인증(Authentication) 인가(Authorization)
기능 자격 증명 확인 권한 허가/거부
진행 방식 비밀번호, 생체인식, 일회용 핀 또는 앱 보안 팀에서 관리하는 설정 사용
사용자가 볼 수 있는가? 아니오
사용자가 직접 변경할 수 있는가? 부분적으로 가능 불가능
데이터 전송 ID 토큰 사용 엑세스 토콘 사용

Stateless | Stateful

  • 상호 작용 상태가 얼마나 오래 기록되는지, 해당 정보가 어떤 식으로 저장되는지를 기준으로 구별

Stateless

  • 클라이언트와 서버 관계에서 서버가 클라이언트의 상태를 보존하지 않는 것
  • Stateless 구조에서 server는 단순히 요청이 오면 응답을 보내는 역할만 수행, 세션관리는 client에게 책임 있음
  • client와의 세션 정보를 기억할 필요가 없으므로, 이러한 정보를 서버에 저장하지 않음(필요에 따라서 외부 DB에 저장하여 관리)
  • 웹서버 통신 (http)특성상 사용자(브라우저)의 이전상태 client(쿠키) or Server(세션) 정보를 기록하지 않는 접속이란 의미
  • 브라우저가 데이터를 전송할 때마다 연결하고 바로 끊어버리는 방식
  • 스테이트리스 애플리케이션은 하나의 서비스 또는 기능을 제공
  • 콘텐츠 전달 네트워크(CDN), 웹, 프린트 서버를 사용해 이러한 단기 요청을 처리
  • 장점 : 서버의 확장성이 높기 때문에 대량의 트래픽이 발생 해도 대처를 수월하게 할 수 있음
  • 단점 : 클라이언트의 요청에 상대적으로 Stateful보다 더 많은 데이터가 소모됨(매번 요청할 때마다 자신의 부가정보를 줘야하기 때문)
  • 대표적인 Stateless 프로토콜: UDP, HTTP
  • ex.  검색창에 질문을 입력하고 엔터키를 누르는 형식으로 진행되는 온라인 검색(트랜잭션이 우발적으로 중단되거나 종료되면 새롭게 시작, 단일 요청에 대해 하나의 응답)

Stateful

  • 서버가 클라이언트의 상태를 보존
  • 클라이언트와 서버 간에 송수신을 하며 단계별 과정을 진행하는데 있어, 서버에서 클라이언트가 이전 단계에서 제공한 값을 저장하고 다음 단계에서도 저장한 상태
  • 온라인 뱅킹이나 이메일처럼 여러 번 반환
  • 이전 트랜잭션의 컨텍스트에 따라 수행
  • 현재 트랜잭션이 이전 트랜잭션에서 발생한 상황에 영향 받음
  • 사용자에게 받은 요청을 처리할 때마다 같은 서버를 사용
  • ex. 홈페이지에서 한번 로그인을 하면 페이지를 이동해도 로그인이 풀리지않고 계속 유지됨(일반적으로 브라우저의 쿠키(Cookie)에 저장되거나, 서버의 세션(Session) 메모리에 저장됨)

 


세션기반 인증 | 토큰기반 인증

  • HTTP는 stateless한 특성을 가지기 때문에 각 통신의 상태가 저장되지 않음
  • -> 그럼 새로운 페이지를 들어갈 때마다 로그인을 항상 해줘야하는가?
  • -> 세션(Session)과 토큰(Token)필요

 

  • 사용자(User)가 인증(Authentication)을 했다면 확인의 표시로 세션이나 토큰을 발급, 전달해줌
  • -> 웹 브라우저에서 세션, 토큰의 정보를 보관하고 있음
  • -> 새로운 요청을 보낼때 인가(Authorization)를 위해 해당 세션, 토큰을 보내줌
세션 DB서버에 저장
토큰 클라이언트 측에서만 저장

세션기반 인증 | 토큰기반 인증 차이점

1. 사이즈

세션 < 토큰
세션 세션을 주고 받는 세션 id의 크기 매우 작음(id를 쿠키에 저장하면 6바이트)
토큰 (JWT 기준) 토큰은 데이터를 담고 있어도 크기가 큼(304 바이트)

 

2. 안정성

세션 - 세션은 서버측에서 저장/관리하기 때문에 상대적으로 온전한 상태를 유지하기 유리함
- 여전히 공격의 위험이 있기에 유효기간, HttpOnly, Secure 옵션 등을 주어 쿠키에 저장함
토큰 - 토큰은 웹 브라우저측 (local storage, 혹은 쿠키 등)에 저장되기 때문에 공격에 노출될 가능성이 더 큼
-> 토큰에는 민감한 정보를 담지 않는다

- 유효기간을 짧게 설정해 공격에 노출될 수 있는 시간을 최소화함
-> 짧은 주기로 토큰이 무효화되면 서비스 사용자는 계속 로그인을 해줘야 하는 번거로움이 있음(로그인[인증]시 refresh token이라는 것을 추가적으로 발급)
 - refresh token은 좀 더 긴 유효기간을 가졌으며 최대한 안전한 곳에 저장됨
- 기존의 토큰이 만료되거나 변질되면 refresh token을 통해 토큰을 재발급

 

3. 확장성

  • 최근 대부분의 웹 서비스가 토큰 방식을 선택하게 된 이유가 바로 확장성에 있음
  • 세션은 서버에 저장되기 때문에 한꺼번에 다중 접속자가 발생한다면 과부하가 걸릴 수 있음
    • -> 과부하를 덜어주기 위해 서버를 여러 대를 둠 <=> 서버가 여러 대라면 세션을 쓰기가 복잡해짐
  •  HTTP는 stateless, connectionless 하기 때문에 요청마다 내가 접속한 서버가 달라질 수도 있음
    • -> 세션 정보가 없는 다른 서버에 접속할 때마다 계속 로그인(sticky session, session clustering과 같은 방안: 처리 비용발생)
    • => 토큰은 위와 같은 걱정 필요 없이 사용 가능

세션 동작 방식


토큰 동작 방식

 

 

 


참고자료

불타는 키보드, [인증/인가]Session(세션)과 Token(토큰)(JWT)의 차이점

okta Developer, Why JWTs Suck as Session Tokens

Red Hat, 스테이트풀과 스테이트리스 비교

camillesn.log,인증(Authentication) & 인가(Authorization)

irostrub, Stateful과 Stateless의 이해

strongdm, The Definitive Guide to Authentication

okta, 인증과 인가 (권한 부여) 비교 – 특징 및 차이점

'IT > Computer Science' 카테고리의 다른 글

Design Pattern 디자인 패턴  (1) 2023.01.09
Compiler 컴파일러  (0) 2023.01.06
GPU(Graphic Processing Unit)  (0) 2023.01.05
IPv4와 IPv6  (0) 2023.01.05
Domain  (0) 2023.01.04