| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- ppt 다이어그램
- 카카오뷰 수익
- ppt 도형 색
- 엑셀 프린트하기
- 카카오뷰 부업
- 자기관리
- 카카오뷰 성장
- 도서 원씽
- 카카오뷰 온라인 수익화
- 위드굿즈 굿즈샵
- Git 팀 작업
- 이석증
- 카뷰 수익 인증
- HTML
- 원씽
- git 협업하기
- 책 원씽
- 엑셀 기초 함수
- 카카오뷰 탭이동
- 성공에 대한 거짓말
- 30일 글쓰기
- CSS
- Axios 라이브러리
- express.js 환경 셋팅
- 위드굿즈
- 실시간 통신
- 성공비법
- 카카오뷰N잡
- 웹기초
- 카카오뷰 초보
- Today
- Total
김데이의 개발공부
[ TIL ] Day 40 & 41 - 인증과 인가 / 쿠키, 세션, 토큰, OAuth 본문
[ TIL ] Day 40 & 41 - 인증과 인가 / 쿠키, 세션, 토큰, OAuth
theday365 2025. 11. 21. 18:43🗓️ 수업 일자 : 2025.11.20 ~ 21
✨ 오늘의 수업 평가 : [ HARD ] ⚡🧠💣 머리 과부하 ⚡🧠💣
뭔가 열심히 배우긴 했는데..
흐릿한 저 뭔가.. 아리까리 알송달송.. 알듯 말듯한 개념들이 쏟아진다..
실습을 통해 전체 구조는 이해 했는데, 막상 시스템에 적용 한다는 개념은 잘 안잡힌다..
📝 오늘 배운 내용
- 인증과 인가
- 쿠키(Cookie) / 세션(Session) / 토큰(Token) / OAuth
- 유저 기능 구현(정리 못함)
1. 인증과 인가
인증 : Authentication, 사용자가 누구인지 확인하는 과정으로 위에 설명한 세션과 토큰으로 인증 과정을 거침
인가 : Authorization, 인증된 사용자의 권한을 확인하는 과정으로 인가를 통해 확인 된 정보를 바탕으로
"일정 등급의 유저에게는 특정 permission을 제공" 하는 등의 서비스 가능
⇒ 웹 사이트에서 "인증"을 진행하면 자연스럽게 "인가"가 따라오기 때문에,
HTTP의 Header에서는 이 두 가지를 Authorization(=인가) : ... 으로 함께 사용
2. 쿠키(Cookie) / 세션(Session) / 토큰(Token) / OAuth
0) 전체 간략 보기
| 명칭 | 분류 | 설명 | 관리 |
| 쿠키 | 저장/전송 기술 | 클라이언트에서 가지고 있는 작은 단위의 데이터. 주로 사용자 로그인 정보, 설정값, 세션 등이며 일부 정보는 요청에 대한 응답으로 받아 저장하고 있다가 특정 상황에 사용 (로그인 정보 등) |
서버 생성 → 클라이언트 저장 |
| 세션 | 인증 관리 방식 | 서버의 사용자 인증 방식으로, 사용자가 서버에 접속하면 세션 ID를 쿠키에 담아 클라이언트에 전달. 클라이언트는 댓글 작성 등과 같은 서비스에서 해당 세션을 이용해 사용자 정보를 사용 |
서버 생성 & 저장 후 관리 |
| 토큰 | 인증 관리 방식 | 사용자 정보를 암호화 하여 비밀키를 생성&사용하는 인증 방식으로, 주로 JWT를 사용해 사용자 정보를 암호화 하여 문자열로 취급 |
서버 생성, 아무데도 저장 안함 |
| OAuth | 인증 프로토콜 |
유저가 허용한 범위에서, 타 사이트에 저장 된 사용자 정보를 가져와 현재 서비스에서 사용하는 방식 | 타 서버의 데이터 공유 |
1) 쿠키(Cookie)
- 기본 개념 : 사용자의 로그인 정보, 설정, 세션등 브라우저에 저장되는 작은 데이터 파일을 의미
- cookie 헤더 = 요청 쿠키
: [key - value] 한 쌍으로 이루어진 쿠키를 여러개 이어서 작성 가능
: 미리 설정 해 둔 조건과 요청 상황이 맞으면 클라이언트(=브라우저)가 자동으로 채워서 보냄

- Set-Cookie = 응답 쿠키
: 서버가 요청에 대한 처리로 response 보낼 때, 헤더 안에 Set-Cookie로 설정하여 클라이언트한테 쿠키값을 전달.
클라이언트(=브라우저)는 응답 정보와 함께 받은 Set-Cookie 정보를 자동으로 저장
=> 클라이언트가 서버에 요청 할 때, 특정 조건이 맞으면 req에 cookie에 넣어서 다시 전달
# response 예시
HTTP/1.1 200 OK
Set-Cookie: token=abc123; Path=/; HttpOnly; Secure;
: <쿠키 이름>=<쿠키 값>; 옵션1=옵션1값; 옵션2; 옵션3 ...
- 자주 쓰는 Set-Cooki 쿠키 옵션 종류
( 보안 관련해서는 HttpOnly, SameSite, Secure 옵션을 함께 사용 )
- Expires : 쿠키가 만료되는 정확한 날짜와 시간을 지정
- Max-Age : 쿠키가 유효한 시간을 초 단위로 지정, Expires보다 우선순위가 높음
- Domain : 쿠키가 전송될 수 있는 도메인을 지정
- Secure : HTTPS 연결에서만 쿠키가 전송되도록 제한
- HttpOnly : JavaScript를 사용해 직접 쿠키를 접근하는 방식을 차단, XSS 공격을 방지
- SameSite : CSRF 공격 방지를 위해 cross-site 요청 시 쿠키 전송 여부를 제어
(클라이언트와 서버의 도메인이 같아야 쿠키 전달)
⇒ 민감한 정보에 대해서만 해당 조치가 필요하고, 일반적인 값에서는 과한 조치임
값에 따라 제어 방식이 달라짐
- SameSite=Lax : 일반적인 페이지 이동에서는 쿠키 전송 O, 민감한 요청(CSRF 위험 높은 POST 등)엔 전송 X
예시) 인스타 하다가 광고 눌렀을 때(=페이지 이동), 해당 사이트와 쿠키를 공유 - SameSite=Strict : 아예 외부 사이트에서 오는 모든 요청엔 쿠키 전송 X (보안 최강)
예시) 인스타 하다가 광고 눌러서 새로운 사이트에 접속 했지만, 쿠키는 하나도 주지 않음 - SameSite=None : 모든 요청에 쿠키 전송 O, 대신 Secure 옵션 필수 (HTTPS만)
예시) 인스타 하다가 광고 눌러서 새로운 사이트에 접속 했는데 HTTPS 사이트여서 쿠키 공유
- SameSite=Lax : 일반적인 페이지 이동에서는 쿠키 전송 O, 민감한 요청(CSRF 위험 높은 POST 등)엔 전송 X
2) 세션 (Session) - 인증 방식
- 기본 개념 : 서버가 사이트 방문자들에 대한 기록을 저장하는것
일정 시간 동안 사용자 활동 없으면 세션을 종료 시킴(세션 만료) - 특징 : DB 또는 메모리에 저장. 특정 세션에 문제(에러,탈취 등)가 있으면, 그냥 통째로 지워서 무효화 가능
- 인증 방식 : 사용자가 사이트를 방문하면 "고유한 세션"을 만들고, 이 세션의 "세션 아이디"를 클라이언트에게 제공
→ 쿠키로 작성해서 클라이언트에게 응답으로 내려보냄(set-cookie에 담음), 후속 요청 전달 시 다시 사용
→ 서버는 요청에 담긴 세션 아이디를 가지고 세션을 확인하고, 인증 된 사용자인지 체크
3) 토큰 (Session) - 인증 방식
- 기본 개념 : 유저 정보를 암호화한 문자열, 암호화를 할 때 서버만 접근 가능한 비밀키(=암호키)
탈취 당할 위험이 있기 때문에 유효 시간을 설정(1시간 등) - 특징 : 서버에 데이터에 저장하지 않고, 내가 만든건지 정도만 확인
⇒ 서버 자원을 덜 쓰고, 암호키만 있으면 되서 확장이 쉬움. 토큰이 탈취 당하면 후속 처리가 어려움 - 인증 방식 : 로그인 하면 사용자의 인증 상태를 암호화 한 토큰을 만들어서 클라이언트에게 제공
→ 쿠키 또는 응답 바디 중 하나를 선택해 전달
→ 클라이언트는 후속 요청을 보낼 때 마다 토큰을 함께 보냄 (쿠키 또는 Authorization 헤더 사용)
→ 서버는 받은 토큰이 유효한 토큰인지 검증하여 인증 된 사용자인지 확인 - 엑세스 토큰 : 유효기간이 짧은 토큰, 일반적인 유저의 작업에 사용되는 토큰
리프레시 토큰 : 유효기간이 긴 토큰, 엑세스 토큰이 만료 되면 클라이언트가 리프레시 토큰을 사용해 다시 엑세스 토큰을 발급 받아옴 ⇒ 토큰을 발급 받을 때에는 2가지 토큰을 함께 발급하여 사용함 - JWT : JSON Web Token , JSON 기반으로 만드는 토큰으로 만들고 검증하는 방식이 단순.
만들어진 문자열은 [헤더.페이로드.시그니쳐]로 구성되며, 각각은 ".(점)"으로 구분.
JWT로 만든 토큰은 재변환이 쉽기 때문에 민감한 정보를 담으면 안됨- JWT 구성 요소
- 헤더 : JWT를 사용하기 위한 정보
- 페이로드 : 표준 클레임(유저 정보)이 담겨 있음. 민감하지 않은 정보 위주로 구성 필요.
- 시그니쳐 : 헤더, 페이로드를 기반으로 "비밀키(256비트 이상의 문자열)"를 작성하여 "서명"하는 정보
JWT 사이트 : https://www.jwt.io/
JWT 예시 (출처: JWT 공식 홈페이지 https://www.jwt.io/ )
4) OAuth
- 유저가 특정 서비스(쇼핑몰 등)에 가입 시, 유저가 허용하는 범위 내에서 타 서비스(SNS 계정)에 저장 된 정보를 사용하는 것
ex) 일반 웹사이트에 가입 할 때, SNS 계정(카카오, 네이버, 구글 등) 을 사용하여 회원가입 하는 경우
해당 SNS 로그인 뒤 해당 계정의 접근을 허용 / 특정 DB를 사용 한다는 과정을 거침 ⇒ OAuth 
OAuth 가입 절차 다이어그램 - OAuth의 특징
- 사용자가 승인한 정보(프로필, 이메일 등)만 접근 가능하여, 제한된 권한만 줄 수 있음
- 가입 한 현재 서비스(쇼핑몰 등)는 타 서비스(SNS등)와 다른 "자체 세션/토큰"을 발급하여 사용
- Access Token : 현재 서비스에서 타 서비스의 API를 호출 할 때 사용하는 임시 열쇠
- OAuth 2.0 표준 : https://oauth.net/2/
OAuth 2.0 — OAuth
OAuth 2.0 OAuth 2.0 is the industry-standard protocol for authorization. OAuth 2.0 focuses on client developer simplicity while providing specific authorization flows for web applications, desktop applications, mobile phones, and living room devices. This
oauth.net
- OIDC (OAuth ID Connect) : 기존의 OAuth는 타 서비스의 정보만 활용한다면 OIDC는 "인증"기능까지 확장,
JWT 페이로드 영역에 ID 토큰까지 받아서 사용
📃 내일은 뭘 배울까 🤔
- 유저 기능 구현
'코드잇 Node.js(BE) 부트 캠프 > TIL (Today I Learn) 📑' 카테고리의 다른 글
| [ TIL ] Day 42 - PASSPORT (node.js) 기본 문법(세션, 토큰) (0) | 2025.11.24 |
|---|---|
| [ TIL ] Day 41 + 해싱솔트, bcrypt 모듈, 유저 기능 세션 / 토큰 (0) | 2025.11.23 |
| [ TIL ] Day 39 - Git / GitHub 팀 협업하기 (0) | 2025.11.19 |
| [ TIL ] Day 38 - Git / GitHub 브랜치 (0) | 2025.11.18 |
| [ TIL ] Day 37 - Git / GitHub 기본 명령어 (1) | 2025.11.17 |