본문 바로가기
TIL

인증 인가 Session vs Token Based Authentication

by 은지:) 2023. 3. 2.
728x90
반응형

 

인증

자격 증명 정보 데이터를 사용하여 누군가 또는 시스템이 실제로 그 누구인지 또는 시스템인지 확인하는 과정

 

인가

인증 과정을 통해 자격이 증명된 사용자에게 특정 리소스 또는 기능에 대한 액세스 권한을 부여하는 과정

 

 

 

 

 

인증의 유형

 

 

SFA (단일 요소 인증)

-> id, qw 를 요구하는 방식

-> 비밀번호, 아이디만 알아도 보안에 쉽게 문제가 생김

 

2FA

-> SFA에서 로그인 시도시

모바일 기기를 통해 사용자에게 부여하는 고유 코드, 지문 같은 추가적인 인증 요소를 요구해 인증을 강화함

 

MFA

-> 2FA 유형에서 보안을 강화하기 위해

사용자가 직접 답변헤야하는 질문을 자격증명 정보에 추가하여 3개 이상의 요소를 인증에 사용하는 것

 

 

 

웹 환경에서 사용자와 시스템 간에 데이터를 교환하게 위해 http 방식을 사용

 

 

http 특징

 

->  stateless, http 요청, 응답은 독립적이기 때문에 과거 통신에 대한 내용을 모름

-> 이전의 상태를 알지 못하기 때문에 매 통신마다 모든 정보를 담아서 요청을 보내야함

-> 로그인 상품 구매, 개인정보 수정 같이 여러번의 통신의 진행과정에서 데이터 처리가 필요한 경우엔

매번 로그인을 위한 인증 정보를 보내줘야 함

-> 이와 같은 불편함을 없애고자 일부 정보에 대해서 stateful 상태를 유지할 필요가 있고

session 과 cookie 같은 token 기술을 사용

 

 

 

Session and Cookie

 

 

세션

 

-> 동일한 클라이언트가 브라우저를 통해 웹 서버에 접속한 시점으로부터 종료하여 연결을 끝내는 시점 동안의 request를

하나의 상태로 보고 이 상태를 유지하여 클라이언트와 웹 서버가 논리적으로 연결된 상태를 말함

 

-> 서버는 sessions에 대한 정보를 저장, 클라이언트에는 session을 구분할 수 있는 id를 부여하는데 이를 session id 라고 함

-> 클라이언트 request를 보낼때 해당 session id 를 함께 보내고 클라이언트의 상태를 확인할 수 있음

 

 

 

cookie

 

클라이언트의 컴퓨터에 저장되는 데이터 파일

이름, 값, 만료 날짜/시간, 경로 정보 등으로 구성되어있음

cookie는 하나의 도메인당 20개를 가질 수 있고 1개 당 4kbyte를 넘길 수 없음

 

서버에서는 http response header에 set-cookie 속성을 이용하여 클라이언트에 cookie를 제공함

클라이언트는 http request에 저장된 cookie를 함께 전달하여 이전의 통신에서 사용된 정보를 파악

 

 

ex) 장바구니 기능 같은 경우 과거에는 로그인을 해야만 사용할 수 있었는데

최근에는 cookie를 사용하여 로그인을 하지 않은 상태로 장바구니에 상품을 담을 수 있음

 

-> 쿠키를 통해 사용자 별로 다른 정보를 표시하는 것이 가능, 사용자의 행동과 패턴을 분석할 수 있기 때문에 최근에 중요한 개념이 되었음

 

 

 

 

 

 

 

session 기반 인증의 특징

 

장점

-> session id 자체는 의미있는 개인정보가 아님

-> 서버에서 정보를 관리하기 때문에 데이터 손상 우려가 상대적으로 안전

-> 서버에서 상태를 유지하고 있으므로 사용자의 로그인 여부 확인이 쉽고 강제 로그아웃 제재도 가능

 

단점

-> 서버에서 모든 사용자의 상태를 관리하기 때문에 사용자 수가 증가할 수록 서버에 가해지는 부하가 증가

-> 사용자가 증가하여 스케일아웃을 할 때 session 관리가 어려우짐

-> 모바일 기기와 브라우저에서 공동 사용할 때 중복 로그인 처리가 되지 않는 문제 등 신경 써야할 부분이 증가

 

 

 

 

 

 

token

 

제한된 리소스에 대해 일정 기간 동안 접근할 수 있는 권한을 캡슐화한 것

 

 

 

 

사용자 인증 과정 요청 -> 인증 완료 후 서버 메모리에 session을 저장하는 대신에 token 발급 -> response body에 담아 사용자에게 전달 -> 클라이언트는 token을 local storage에 저장 -> 클라이언트는 request 할때마다 저장된 token을 포함시켜 서버로 보냄

 

 

token 기반 인증의 특징

 

 

 

장점

-> token을 사용자 측에서 저장하기 때문에 서버의 메모리나 db 부담이 없음

-> 사용자의 상태 정보를 서버에서 관리하지 않기 때문에 서버의 scaleOut 에 용이

-> 모바일과 브라우저의 멀티 환경에서 사용이 용이

-> token 만료시간을 짧게 설정하여 안정성을 높일 수 있음

-> cors 방식을 사용하기 용이

 

단점

-> 서버에서 사용자의 상태를 저장하고 있지 않기 때문에 사용자의 로그인 여부 확인, 강제 로그아웃 등의 제재를 가하기 어려움

-> 사용자가 토큰을 임의로 수정할 시 서버에서 확인할 수가 없음

-> session id가 길이보다 길어져 http request 전송 데이터 크기가 증가

-> xss 공격에 취약하기 때문에 민감한 정보를 포함하는 경우 위험함

 

이점

-> 상태 정보를 클라이언트에서 하기 때문에 서버의 상태를 Stateless하게 유지하게 됨

-> 일반적으로 session 기반 인증에서는 로그인 상태를 유지하기 위해서 최초 로그인시에 request한 서버로 계속 Session id를 보내주어야 함. token 방식은 서비스를 운영 중인 어떤 서버로든지 request를 보낼 수 있기 때문에 token 기반 인증 방식을 사용하면 서버의 확장에 유리함

-> 클라이언트가 서버로 요청을 보낼때 cookie를 전달하지 않기 때문에 csrf 공격을 방지하는데 도움이 됨

-> token을 통해 권한 범위를 지정할 수 있음. 이를 이용하여 소셜 계정을 이용하여 다른 웹 서비스 로그인이 가능

-> 서버 기반 인증 시스템의 문제점 중 하나인 cors를 해결할 수 있음. 

 

 

 

 

 

728x90
반응형

'TIL' 카테고리의 다른 글

상태관리  (0) 2023.03.06
Node.js ) import/export 사용  (0) 2023.03.04
promise - catch / async await (try-catch)  (0) 2023.02.28
Layered Pattern이란?  (0) 2023.02.27
my SQL  (0) 2023.02.26

댓글