Authentication & Authorization

누리·2022년 10월 12일
0

Team Project

목록 보기
5/8

로그인 기능 개발시 꼭 알아야 하는 기본 지식

인증이란?

  • 사용자의 자격 증명 정보와 인증 서버의 자격 증명 정보를 비교하여 시스템에 대한 액세스 권한을 제공
    ex) 돈을 인출하기 위해 은행에 간다고 했을 때, 은행원에게 통장과 도장 그리고 신분증을 제시하는 과정과 같다
  • SFA : iD 비밀번호
  • 2FA : 2단계인증. 추가적인 인증 요소를 요구
  • MFA : 다중 요소 인증. 3개 이상의 신원확인 요소를 요구

인증절차

  1. 회원가입 절차 : 서비스 이용을 원하는 사용자는 서비스 가입 절차를 진행
  • 서버는 가입 절차 때 입력한 사용자의 아이디와 비밀 번호를 데이터 베이스에 저장 (입력한 문자 그대로가 아닌 암호화 후 저장)
  1. 로그인 절차 : 사용자가 회원가입때 입력한 본인의 아이디와 비밀번호를 입력

인가란?

인가는 사용자에게 특정 리소스 또는 기능에 대한 액세스 권한을 부여하는 프로세스
ex) 누군가에게 서버의 특정 파일을 다운로드할 수 있는 권한 부여,
개별 사용자에게 서비스 관리 액세스 권한을 제공

Session vs Token

  • 웹환경에서 사용자와 시스템간에 데이터를 교환하기 위해 HTTP방식을 사용
  • 각각의 HTTP 통신(요청/응답)은 독립적이기 때문에 과거의 통신에 대한 내용을 전혀 알지 못 하는 Stateless 상태를 유지
  • 각각의 통신 내용을 모르기 때문에 매 통신마다 필요한 모든 정보를 담아서 요청을 보내야함
    ex) 로그인 후 상품구매나 개인정보 수정같이 여러번의 통신의 진행과정에서 연속된 데이터 처리가 필요한 경우에 statelsee 특징에 따라 매번 로그인을 위한 인증정보가 매번 필요
  • 이같은 불편함을 없애고자 일부 정보에 대해 Stateful 상태 유지
  1. Session : 클라이언트가 브라우저를 통해 웹서버에 접속한 시점으로부터 브라우저를 종료하여 연결을 끝내는 시점동안 클라이언트와 웹서버가 논리적으로 연결된 상태
  • 서버는 Session 정보를 저장하고 클라이언트에게 session을 구분할수 있는 session ID를 부여
  • 클라이언트 Request를 보낼 대 해당 Session ID를 함께 보냄으로써 클라이언트의 상태를 확인
  1. Cookie : 클라이언트의 컴퓨터에 저장되는 데이터 파일
  • 서버에서는 HTTP Response Header에 Set-Cookie 속성을 이용하여 클라이언트에 Cookie를 제공하여 저장하게 함
  • 클라이언트는 HTTP Request에 저장된 Cookie를 함께 전달

Session 인증 Flow

  • 사용자가 로그인을 하기위해 인증정보를 가지고 인증과정을 요청
  • 인증이 완료되면 사용자의 Session 정보를 서버의 메모리에 저장
  • 해당 Sessio을 식별할 수 있는 Session ID 발급
  • 발급한 Sesseion ID를 사용자에게 전달
  • 전달받은 Session ID는 브라우저의 Cookie에 저장
  • 사용자가 Request를 서버에 보낼때 Sesseion ID가 함께 전달
  • 서버는 사용자가 보낸 Session ID와 서버 메모리에서 관리하고 있는 Session ID를 비교 후 권한 부여

Session 기반 인증 특징

장점

  • Session ID자체에는 유의미한 개인정보가 없음
  • 서버에서 정보를 관리하기때문에 데이터의 손상 우려 적음
  • 서버에서 상태를 유지하고 있으므로, 사용자의 로그인여부 확인이 쉬움
  • 경우에 따라 강제로그아웃 등의 제재를 가할 수 있음

단점

  • 서버에서 모든 사용자의 상태를 관리해야되므로 사용자 수가 증가 할 수록 서버에 가해지는 부하가 증가
  • 사용자가 증가하여 서버의 Scale Out을 해야할 때 Session 관리가 어려워짐

Token 기반의 인증

  • Token이란? 동전 모양의 주조물이다
  • 웹서버에서 토큰이란? Token을 가지고 잇다면 해당 서비스를 이용할 수 있는 권리가 있다고 간주한다
  • 제한된 리소스에 대해 일정 기간 동안 접근할 수 있는 권한을 캡슐화
  • Token은 일반적으로 의미를 알수없는

Token 인증 Flow

  • 사용자가 로그인을 하기위해 인증 정보를 가지고 인증과정을 요청
  • 인증이 완료되면 사용자의 식별 정보를 가지고 있는 Token을 발급
  • 발급한 Token은 Response의 Body에 담아 사용자에게 전달
  • 발급된 Token을 local storage에 저장

Token 기반 인증의 특징

장점

  • Token을 사용자 측에서 저장하므로 서버의 메모리나 DB의 부담이 없음
  • 사용자의 상태 정보를 서버에서 관리하지 않으므로 서버의 Scale Out에 용이
  • Token의 만료 시간을 짧게 설정하여 안정성 증가
  • Statelss서버의 상태를 Stateles하게 유지
  • Scalability 사용자와 서버사이 관계가 없기 때문에 어떤 서버로든지 Request를 봐낼 수 있고, 서버의 확장에 유리
  • Security 사용자가 서버로 요청을 보낼 때 더 이상 Cookie를 전달하지 않으므로, CSRF 공격을 방지하는 데 도움이 됨
  • Extensibility 토큰을 통해 권한의 범위를 지정 할 수 있다 그래서 소셜 계정등을 이용하여 다른 웹서비스에서도 로그인을 할 수 있음

단점

  • 사용자의 로그인 여부 확인 및 강제 로그아웃 등의 제재를 가하기 어려움
  • 사용자가 임의로 토큰을 수정하거나 구조가 변경되게 되면 서버에서 확인할 수 없음
  • Payload부분에 사용자 식별을 위한 여러 정보들이 포함되어 있어 Session Id의 길이보다 길어져 HTTP request 전송 데이터의 크기가 증가
  • XSS 공격에 취약하여 Payload에 민감한 정보를 포함하는 경우 위험함
profile
프론트엔드 개발자

0개의 댓글