1. Authentication(인증)
(1) 유저가 아이디와 비밀번호로 로그인
(2) 서버에서 해당 계정 정보를 검증
(3) 계정 정보가 정확하다면, 서버 측에서 유저에서 accessToken 발급
(4) 클라이언트 측에서 전달 받은 토큰을 저장해두고, 서버에 요청을 할 때마다 해당 토큰을 함께 서버에 전달
(5) 서버는 토큰을 검증, 요청에 응답
2. 기존 서버 기반 인증 시스템
(1) 서버가 유저의 인증 기록을 세션에 저장, 로그인 유저가 많아지면 서버가 과부하
(2) 세션을 사용하면 분산된 시스템을 설계하고 서버를 확장하는 것이 어려움
(3) 세션을 관리할 때 사용되는 쿠키는 여러 도메인에서 관리하는 것이 번거로움
(4) 위와 같은 시스템의 단점을 보완하기 위해 토큰 기반 인증 시스템을 사용하게 됨
3. 토큰 기반 인증 시스템의 장점
(1) 무상태(Stateless) & 확장성(Scalability)
- Stateful Server의 경우 클라이언트에게 요청 받을 때마다 상태를 유지하고 정보를 서비스 제공에 이용
- 반면, Stateless Server의 경우는 상태 정보를 저장하지 않고, 서버는 클라이언트의 요청만으로 작업을 처리, 세션을 사용하지 않음
- 클라이언트와 서버의 연결고리가 없어 서버를 확장하기에 매우 적합한 환경 제공
(2) 확장성(Extensibility)
로그인 정보가 사용되는 분야을 확장 가능
4. Authorization(인가)
(1) 사용자의 인증이 필요한 경우 Client는 발급 받은 JWT를 Request Header(HTTP Header)에 실어 보내줌
(2) Backend는 JWT를 받고 Guard를 통해 JWT Strategy를 실행하고, Secret Key를 통해 JWT를 Decoding
(3) JWT를 복호화한 후에 원하는 API의 Business Logic이 수행된 후, Response 됨
'Javascript > NestJS' 카테고리의 다른 글
CORS (0) | 2022.12.18 |
---|---|
결제 시스템 (0) | 2022.12.18 |
암호화 (단방향, 양방향) (0) | 2022.12.05 |
Login Process (0) | 2022.12.05 |
브라우저 저장소(Web Storage), Cookie (0) | 2022.12.05 |