Jay's Cookbook
Menu
  • Tags
  • Categories
  • Projects
Computer Science
OS
Network
Data Structure
Algorithm
Language
Code Architecture
Python
Javascript
Typescript
Java
Backend
Backend Theory
TypeORM
Node.js
NestJS
FastAPI
Frontend
HTML/CSS
React
Next.js
Data Engineering
DE Theory
MySQL
MongoDB
Elastic
Redis
Kafka
Spark
Airflow
AI
Basic
Pytorch
NLP
Computer Vision
Data Analytics
Statistics
Pandas
Matplotlib
DevOps
Git
Docker
Kubernetes
AWS
[Backend Thoery] 인증/인가
backend
backend_theory

[Backend Thoery] 인증/인가

Jay Kim
Jay Kim 08 Dec 2023
[Backend Thoery] 쿠키와 세션 [Backend Thoery] 암호화

Table of Contents

  • 인증과 인가
  • 인증(Authentication)
    • 세션 인증 방식
    • JWT 토큰 인증 방식
    • OAuth 인증 방식
  • 인가(Authorization)
  • 참고

인증과 인가

  • 인증(Authentication)
    • 유효한 사용자인지를 확인한다
    • ex. 로그인 여부를 확인한다
  • 인가(Authorization)
    • 권한이 있는지를 확인하고 있으면 특정 행동을 허가한다
    • 인가는 인증 절차를 거친 후에 진행된다
    • ex. 불법 광고 영상을 올린 사용자를 탈퇴시키려 할 때, 먼저 관리자 권한이 있는지 확인하고 있는 경우 허가한다
    • ex. 자신이 작성했던 댓글을 수정하려 할 때, 댓글 작성자가 맞는지 확인하고 맞는 경우 허가한다

인증(Authentication)

  • 보통 인증은 웹 서비스에서 로그인한 유저에게만 제공하는 정보에 접근하려고 할 때 요구된다
  • 이 때 HTTP는 무상태(stateless)한 특성 때문에 로그인한 정보를 저장하고 있지 않으면, 매번 인증 절차를 진행해야 된다
  • 그래서 백엔드에서 인증 절차를 구현할 때는 사용자의 로그인 정보를 어디에 저장할지 고민해야 한다
  • 아래의 세가지 주요 인증 방식을 살펴보자

세션 인증 방식

  • 서버에 포함된 세션 저장소에 로그인한 사용자의 정보를 저장한다
  • 사용자가 로그인 성공시 세션 저장소에 (세션ID-사용자정보)라는 키-밸류 형태의 데이터가 저장되고, 사용자의 웹 브라우저 쿠키에 세션ID가 저장된다
  • 사용자는 매번 로그인 인증 절차를 거치지 않고, 쿠키에 저장된 세션ID를 요청(request)과 함께 보냄으로써 인증된 사용자임을 증명할 수 있다

세션 인증 방식의 장단점
  • 장점
    • 사용자 민감 정보는 서버에 저장하고, 세션 ID만으로 인증이 가능하다
    • 쿠키에는 세션 ID 정보만 있기 때문에, 탈취되어도 세션 ID만 무효화하면 사용자 정보는 안전하다는 점에서 사후대처가 된다
  • 단점
    • 해커가 세션 ID를 탈취하여 위장 접근할 수 있다.(하이재킹 공격)
    • 서버를 스케일아웃 시킬 경우 모든 서버가 세션 정보를 가지고 있어야 하므로, 서버의 확장성을 떨어트린다 (유튜브 7분 30초 참고)

JWT 토큰 인증 방식

  • 로그인한 사용자 정보를 JWT 토큰으로 만들어 사용자의 브라우저 쿠키에 저장한다
  • 사용자가 로그인 성공시 서버는 로그인 정보를 이용해 JWT 토큰을 만들어 사용자의 브라우저 쿠키에 저장한다
  • 사용자는 매번 로그인 인증 절차를 거치지 않고, 쿠키에 저장된 JWT 토큰을 요청(request)과 함께 보냄으로써 인증된 사용자임을 증명할 수 있다

JWT 토큰 인증 방식의 장단점
  • 장점
    • 서버의 확장성에 영향을 미치지 않는다
  • 단점
    • 세션 ID와 비교해 JWT 토큰은 비교적 문자열이 길다. 그래서 네트워크 오버헤드가 비교적 크다
    • 암호화되어 있긴 하지만, 어쨋든 사용자 정보가 클라이언트 측에 저장된다 (보안에 치명적인 데이터는 담지 않는게 좋다)
    • 해커에게 탈취되었을 때, 딱히 취할 수 있는 대처방법이 없다

OAuth 인증 방식

  • Open Standard for Authorization
  • 개방형 Authorization 표준
  • 여러 웹사이트에 사용자의 민감한 정보를 저장하지 않고, 신뢰할 수 있는 외부 서비스(ex. 구글, 네이버 등)에 저장된 사용자 정보로 인증/인가 하는 방식이다
  • OAuth는 제 3자의 클라이언트(보통 우리가 만든 웹서비스를 말함)에게 보호된 리소스를 제한적으로 접근하게 해주는 프레임워크를 말한다
  • OAuth 프레임워크에는 다음과 같은 주체들이 있다
    • 리소스 소유자: 사용자
    • 클라이언트: 사용자의 정보를 접근하는 제 3자의 서비스
    • 인증 서버: 클라이언트의 접근을 관리하는 서버
    • 리소스 서버: 리소스 소유자의 데이터를 관리하는 서버

인가(Authorization)

  • 인가는 인증을 성공한 사용자가 특정 요청에 대해 권한이 있는지를 확인한다
  • ex. 로그인 후 내가 작성한 댓글 수정 요청을 보낼 때, 요청을 보낸 사용자가 댓글 작성자와 일치하는지 확인한다
  • 보통 사용자의 이메일(email)을 통해 사용자를 확인하거나 또는 사용자의 역할(role)을 통해 권한이 있는지 확인한다

참고

  • Basic 인증과 Bearer 인증의 모든, 토스 페이먼츠
  • [Web] 로그인 인증 방식, dee_thinking
  • [10분 테코톡] 토닉, 후디의 인증과 인가, 우아한테크 유튜브
[Backend Thoery] 쿠키와 세션 [Backend Thoery] 암호화

You may also like

See all backend_theory
12 Apr 2024 [Backend Thoery] Datetime, Timestamp, Timezone
backend
backend_theory

[Backend Thoery] Datetime, Timestamp, Timezone

10 Apr 2024 [Backend Thoery] 의존성 주입(Dependency Injection)
backend
backend_theory

[Backend Thoery] 의존성 주입(Dependency Injection)

05 Apr 2024 [Backend Thoery] 대용량 트래픽
backend
backend_theory

[Backend Thoery] 대용량 트래픽

Jay Kim

Jay Kim

Web development, data engineering for human for the Earth. I share posts, free resources and inspiration.

Rest
Lifestyle
Hobby
Hobby
Hobby
Hobby
2025 © Jay's Cookbook. Crafted & Designed by Artem Sheludko.