반응형
이미 정리한 적 있지만 두루뭉실하게 알고 있는 관계로
제대로 이해하기 위해 다시 정리를 해보려고 한다
Session
세션이란?
유저의 정보를 데이터 베이스에 저장하고 상태를 유지하는 도구
세션의 특징
- 세션은 특수한 ID 값으로 구성되어 있다.
- 세션은 서버에서 생성되며 클라이언트에서 쿠키를 통해 저장된다.
- 클라이언트에서 요청을 보낼 때 Session ID 를 같이 보내면 현재 요청을 보내는 사용자가 누구인지 서버에서 알 수 있다.
- Session ID는 데이터베이스에 저장되기 때문에 요청이 있을 때 마다 매번 데이터베이스를 확인해야한다.
- 서버에서 데이터가 저장되기 때문에 클라이언트에 사용자 정보가 노출 될 위험이 없다.
- 데이터베이스에 Session을 저장해야하기 때문에 Horizontal Scaling이 어렵다
JWT Token
JWT 란?
유저의 정보를 Base64로 인코딩된 String 값에 저장하는 도구
JWT Token의 특징
- JWT는 Header, Payload, Signature로 구성되고 Base64로 인코딩 되어있다.
- 토큰은 서버에서 생성되며 클라이언트에 저장된다
- 클라이언트에서 요청을 보낼 때 JWT Token ID를 같이 보내면 현재 요청을 보내는 사용자가 누구인지 서버에서 알 수 있다.
- 토큰은 DB에 저장되지 않고 Signature 값을 이용해서 검증할 수 있다. 매번 DB를 확인할 필요가 없다.
- 정보가 모두 토큰에 담겨있고 클라이언트에서 토큰을 저장하기 때문에 정보 유출의 위험이 있다.
- 데이터베이스가 필요 없기 때문에 Horizontal Scaling이 쉽다.
Session 인증 플로우
JWT Token 검증 플로우
비교요소 | 세션 | JWT |
유저의 정보를 어디에 저장하는가? | 서버 | 클라이언트 |
클라이언트에서 서버로 보내는 정보는? | 쿠키 | 토큰 |
유정보를 가져올 때 데이터베이스를 확인하는가? | 확인필요 | 토큰의 페이로드에 들어있는 정보만 필요한 경우 확인 불필요 |
클라이언트에서 인증 정보를 읽을 수 있는가? | 불가능 | 가능 |
Horizontal Scaling이 쉬운가 | 어려움 | 쉬움 |
Refresh Token & Access Token
- Access Token 은 API 요청을 할 때 검증용 토큰으로 사용된다.
인증이 필요한 API를 사용할 때는 꼭 Access Token을 Header에 넣어서 보내야한다.
ex) 유저 정보 수정 ... - Refresh Token 은 Access Token을 추가로 발급할 때 사용된다.
Access Token은 유효기간이 짧고 Refresh Token은 유효기간이 길다. - 자주 노출되는 Access Token은 유효기간을 짧게해서 Token이 탈취돼도 해커가 오래 사용하지 못하도록 방지할 수 있다.
- 상대적으로 노출이 적은 Refresh Token의 경우 Access Token을 새로 발급받을 때만 사용되기 때문에 탈취 가능성이 적다.
JWT 토큰 발급 과정
Refresh Token 사용 과정
Access Token 사용 과정
Refreshing Logic
반응형
'nestJS' 카테고리의 다른 글
NestJS | Config (env) (0) | 2024.08.25 |
---|---|
NestJS | Pagination 페이지네이션 (0) | 2024.08.22 |
NestJS | Service (0) | 2024.08.14 |
NestJS | Controller | 모듈 생성하기, Postman 요청 보내기 (0) | 2024.08.13 |
NestJS 시작하기 (1) | 2023.12.15 |