[Authentication] 인증과 인가

juno·2022년 8월 8일
0

목록 보기
1/1

웹페이지의 필수 기능 회원가입 구현 절차

웹상에서의 인증과 인가, 쉽게 표현하여 회원가입, 로그인 상태라고 할 수 있다.

웹에서의 인증에는 여러가지 유형이 있습니다.

  1. SFA (단일 요소 인증)

    Single-Factor Authentication, ID와 비밀번호

  1. 2FA(2단계 보안 인증)
    Two-factor authentication, 모바일 OTP
  1. MFA(다단계 인증)

    Multi-Factor Authentication, 3개이상의 절차

인증 절차

여기서 SPA 인증 절차를 상상력을 동원해서 한번 풀어보았다.

1. 회원가입 절차

서비스 이용을 이해 사용자는 회원 가입 절차를 밟게 되는데, 이때 사용자의 아이디와 비밀번호를
데이터 베이스에 저장 한다고 생각해 보자.
허나, 입력받은 문자 그대로 저장하면 통신 중 누구나 쉽게 정보를 얻어 갈 수 있으니,
사용자의 비밀번호는 암호화를 진행하고 저장한다고 한다.

2. 로그인 절차

사용자가 아이디,비밀번호를 입력하면, 비밀번호는 암호화한 후에 DB의 데이터와 비교한다.
이때 DB의 비밀번호도 암호화 된 상태이다. 암호화된 비밀번호가 서로 일치하면 로그인 성공이다.
그 후 백엔드는 API 서버는 사용자의 인증 정보가 담긴 access token을 사용자에게 전송합니다.
이 access token을 가지고 있는 상태에서는 사용자는 로그인 상태인 거고 인증된 상태인 것이다.

인가 (Authorization)

인가는 사용자에게 특정 리소스 또는 기능에 대한 액세스 권한을 부여하는 프로세스이며, 종종 액세스 제어 또는 클라이언트 권한과 같은 의미로 사용됩니다.

로그인이 된 후 라고 보면 쉽다.

웹 환경에서 사용자와 시스템 간에 데이터를 교환하기 위해 HTTP 방식을 사용합니다.

HTTP 통신은 요청과 응답에 의해 동작하며(주거니 받거니),
HTTP의 특징 중 가장 중요한 특징은 바로 Stateless 입니다. => State(상태) + less(없음)

HTTP 통신(요청/응답)은 독립적 이기 때문에 과거의 통신(요청/응답)에 대한 내용을 전혀 알지 못 합니다.

그러므로 인증은 한번만 일어나는게 아닌게 됩니다, 매번 해야되는 것입니다.

이를 위해서 Session과 Cookie 또는 Token 같은 기술을 사용합니다.(stateful 상태를 유지 하기위해서)

Session

클라이언트(사용자)가 브라우저를 통해 웹 서버에 접속한 시점으로부터 브라우저를 종료하여 연결을 끝내는 시점 동안에 들어오는 일련의 Request(요청을)를 하나의 상태로 보고, 그 상태를 일정하게 유지하여 클라이언트와 웹 서버가 논리적으로 연결된 상태를 뜻합니다.
서버는 Session에 대한 정보를 저장하고 클라이언트에게는 Sesssion을 구분할 수 있는 ID를 부여하는데 이것을 Session ID라고 합니다

1. 장점

Session ID 자체에는 유의미한 개인정보를 담고 있지 않습니다.
서버에서 정보를 관리하기 때문에 데이터의 손상 우려에 대해 상대적으로 안전 합니다.
서버에서 상태를 유지하고 있으므로, 사용자의 로그인 여부 확인이 쉽고, 경우에 따라서 강제 로그아웃 등의 제재를 가할 수 있습니다.

2. 단점

서버에서 모든 사용자의 상태를 관리해야 되므로 사용자의 수가 증가 할 수록 서버에 가해지는 부하가 증가합니다.

사용자가 증가하여 서버의 Scale Out을 해야 할 때 Session의 관리가 어려워 집니다.

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

Cookie

Cookie는 클라이언트의 컴퓨터에 저장되는 데이터 파일입니다.
데이터가 지나가면서 남긴 과자 부스러기라고 생각하면 편합니다.
그 부스러기로는 이름, 값, 만료 날짜/시간(저장기간), 경로 정보 등으로 구성이 되어있습니다.
Cookie는 하나의 도메인 당 20개를 가질 수 있으며, 1개 당 4Kbyte를 넘길 수 없다는 특징을 가지고 있습니다.

서버에서는 HTTP Response Header에 Set-Cookie 속성을 이용하여 클라이언트에 Cookie를 제공하여 저장하게 하고, 클라언트는 HTTP Request에 저장된 Cookie를 함께 전달하여 이전의 통신에서 사용된 정보들을 파악할 수 있습니다.

또한 Cookie를 통해 사용자별로 다른 정보를 표시하는 것이 가능하고, 사용자의 행동과 패턴을 분석할 수 있기 때문에 최근들어 더욱 중요한 개념이 되었습니다.

Token

화폐대용, 웹에서는 민증(?) 이라고 생각하자.

1. 장점

Token을 사용자 측에서 저장하므로 서버의 메모리나 DB 등의 부담이 없다.
사용자의 상태 정보를 서버에서 관리하지 않기 때문에 서버의 Scale Out에 용이 하다.
모바일과 브라우저의 멀티 환경에서 사용이 용이 합니다.
Token의 만료 시간을 짧게 설정하여 안정성을 높일 수 있다.
CORS(교차 출처 리소스 공유) 방식을 사용하기 용이 합니다.

2. 단점

서버에서 사용자의 상태를 저장하고 있지 않기 때문에 사용자의 로그인 여부 확인, 경우에 따른 강제 로그웃 등의 제재를 가하기 어렵다.

사용자가 임의로 토큰을 수정하거나 구조가 변경되게 되면 서버에서 확인할 수가 없습니다.

Payload 부분에 사용자 식별을 위한 여러 정보들이 포함 되어 있어 Session Id의 길이보다 길고, HTTP request 전송 데이터의 크기가 크다.

XSS 공격에 취약하여 Payload에 민감한 정보를 포함하는 경우 위험할 수 있습니다.

Token based Authentication의 이점

1. Stateless

Session 방식처럼 상태 정보를 서버측에서 관리 하지 않고, 사용자 측에서 관리하기 때문에 서버의 상태를 Stateless하게 유지합니다. 따라서 서버측에서는 사용자로부터 받은 Request만을 가지고 작업을 수행 할 수 있습니다.

2. Scalability

Token 기반의 인증 방식을 사용하면 서버의 확장에 유리 합니다.

3. Security

클라이언트가 서버로 요청을 보낼 때 더 이상 Cookie를 전달하지 않으므로, CSRF (사이트 간 요청 위조)공격을 방지하는 데 도움이 된다.

4. Extensibility

Token 기반의 인증 시스템에서는 토큰을 통해 권한의 범위를 지정 할 수 있습니다.
이를 이용하여 KaKao, Facebook, Google 등과 같은 소셜 계정을 이용하여 다른 웹서비스에서도 로그인을 할 수 있습니다.

5. Multiple Devices and Domains

서버 기반 인증 시스템의 문제점 중 하나인 CORS(Cross-origin resource sharing)를 해결할 수 있다.

애플리케이션과 서비스의 규모가 커지면 여러 기기들을 호환시키고 더 많은 종류의 서비스를 제공하게 된다.

토큰을 사용한다면 어떤 기기, 어떤 도메인에서도 토큰의 유효성 검사를 진행한 후에 요청을 처리할 수 있습니다.

  1. 정리
  1. 인증 절차과정이 있을때 클라이언트와 웹서버의 통신은 HTTP를 통해 이루워지는데 HTTP는 Stateless의 특징이 있다.

  2. 이를 보안하기위해 Section,Cookie,Token 방식을 사용한다.

    	**Section은** 페이지를 벗어나지 않으면 서버와 클라언트는 계속 연결되있고, 인증된 상태이고

    Cookie는 이름, 값, 만료 날짜/시간(저장기간), 경로 정보 등을 기억하고 그 데이터를 HTTP통신시 송신한다.
    Token은 클라이언트가 가지고 있는 민증이라고 생각하면 편하고, 서버에서 데이터를 송신할 때, Token의 여부에 따라 데이터를 준다.

profile
안녕하세요 인터랙션한 웹 개발을 지향하는 프론트엔드 개발자 입니다. https://kimjunho97.tistory.com => 블로그 이전 중

0개의 댓글