Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- github
- 알고리즘
- DFS
- 프론트엔드개발자
- 코딩테스트
- CS
- 야놀자
- 너비우선탐색
- html/css/js
- LinkSnap
- nodejs
- 그리디
- 자바스크립트
- 백준
- js
- 코테
- CSS
- 컴퓨터공학
- cpu
- Javascript
- 부트캠프
- computerscience
- 국비지원
- git
- 호이스팅
- 국비지원취업
- 컴퓨터과학
- BFS
- 패스트캠퍼스
- KAKAO
Archives
- Today
- Total
My Boundary As Much As I Experienced
Session, JWT, OAuth이란? 본문
1. 인증을 구현하는 방식
로그인한 유저 혹은 특정 권한이 필요한 정보를 전달할 때 '인증'이 필요해진다.
이걸 구현하는 방식에는 크게 Session, Token, OAuth 등이 있다.
2. Session (세션)
개념:
- 세션은 서버 측에서 사용자에 대한 상태 정보를 저장하는 방식이다.
- 사용자가 로그인하면 서버는 세션을 생성하고, 세션 ID를 클라이언트에게 쿠키로 전달한다.
- 클라이언트는 이후 요청 시 쿠키를 통해 세션 ID를 서버에 전달하여 인증을 받는다.
작동 방식:
- 사용자가 로그인하면 서버는 고유한 세션 ID를 생성하고, 이를 서버 메모리나 데이터베이스에 저장한다.
- 세션 ID는 클라이언트에게 쿠키로 전달한다.
- 클라이언트는 이후 요청마다 이 쿠키를 포함시켜 서버에 전송한다.
- 서버는 쿠키의 세션 ID를 확인하여 해당 사용자의 정보를 조회하고 인증을 처리한다.
장점:
- 서버에서 상태를 관리하므로 보안이 상대적으로 우수하다.
- 세션 데이터는 서버에 저장되어 클라이언트에서 조작이 불가능하다.
단점:
- 서버 혹은 DB에 상태를 저장하기 때문에 서버 메모리 사용량이 증가할 수 있다.
- 이걸 보완하기 위해 Redis같은 sessionId 보관용 DB를 따로 쓰기도 한다. (입출력 빠름) - 확장성이 낮아 서버 간 세션 동기화가 필요할 수 있다.
3. JWT (JSON Web Token)
개념:
- JWT는 클라이언트 측에서 상태 정보를 저장하고 전송하는 방식이다.
- JWT는 JSON 형식으로 인코딩된 페이로드와 서명으로 구성된다.
- 인증 정보는 토큰 자체에 포함되며, 서버는 토큰을 검증하여 인증을 처리한다.
작동 방식:
- 사용자가 로그인하면 서버는 JWT를 생성하고, 이를 클라이언트에 전달한다.
- 클라이언트는 이후 요청마다 JWT를 포함시켜 서버에 전송한다 (일반적으로 HTTP 헤더에 포함).
- 서버는 토큰의 서명을 검증하고, 페이로드에서 사용자 정보를 추출하여 인증을 처리한다.
장점:
- 서버에서 상태를 관리하지 않으므로 확장성이 우수하다.
- DB까지 조회하지 않아도 되어 DB 부하가 적다.
- 여러 도메인 간에 쉽게 사용할 수 있다.
단점:
- 클라이언트에서 토큰이 조작될 수 있으므로 서명 검증이 필수이다.
- 토큰이 탈취되면 만료 시간까지 사용될 수 있어 보안에 주의해야 한다.
- 공격자가 탈취하면 만료될 때까지 계속 쓸 수 있다. 그래서 엑세스 토큰의 유효기간을 짧게 해놓는 편.
3. OAuth (Open Authorization)
개념:
- OAuth는 리소스 소유자가 제3자 애플리케이션에 자신의 리소스에 대한 접근 권한을 위임하는 프로토콜이다.
- 주로 소셜 로그인, API 접근 권한 위임 등에 사용된다.
작동 방식:
- 사용자가 제3자 애플리케이션에서 리소스 소유자에게 인증 요청을 보낸다.
- 리소스 소유자는 권한 부여 서버를 통해 사용자를 인증하고, 권한을 부여한다.
- 권한 부여 서버는 액세스 토큰을 제3자 애플리케이션에 전달한다.
- 제3자 애플리케이션은 액세스 토큰을 사용하여 리소스 서버에 접근한다.
장점:
- 리소스 소유자가 자신의 자격 증명을 제3자 애플리케이션과 직접 공유하지 않아도 된다.
- 다양한 권한 범위와 만료 시간을 설정할 수 있다.
단점:
- 설정과 구현이 복잡할 수 있다.
- 각 서비스마다 권한 부여 절차가 다를 수 있다.
요약
- Session: 서버 측에서 상태 정보를 관리하고, 클라이언트는 세션 ID를 쿠키로 전달하여 인증.
- JWT: 클라이언트 측에서 상태 정보를 관리하고, 토큰 자체에 인증 정보를 포함하여 서버에 전달.
- OAuth: 제3자 애플리케이션이 리소스 소유자의 리소스에 접근할 수 있도록 권한을 위임하는 프로토콜.
'BackEnd > Node.js' 카테고리의 다른 글
직렬화(serialization)와 역직렬화(deserialization) (0) | 2024.08.07 |
---|---|
express로 세션(session) 구현하기 (feat. passport, express-session) (0) | 2024.08.05 |
express로 페이지네이션 구현하기 (0) | 2024.08.03 |
Express, ejs탬플릿과 MongoDB으로 게시판 CRUD 구현 (0) | 2024.07.29 |
ejs 템플릿 엔진 사용하기 (0) | 2024.07.08 |