인증
자격 증명 정보 데이터를 사용하여 누군가 또는 시스템이 실제로 그 누구인지 또는 시스템인지 확인하는 과정
인가
인증 과정을 통해 자격이 증명된 사용자에게 특정 리소스 또는 기능에 대한 액세스 권한을 부여하는 과정
인증의 유형
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를 해결할 수 있음.
'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 |
댓글