일반적으로 서버-클라이언트 구조로 되어있고, 실제로 이 두가지 요소는 아주 멀리 떨어져있음
Http라는 프로토콜을 이용하여 통신하는데, 그 통신은 비연결성(Connectionless) 무상태(Stateless) 로 이루어짐
비연결성(Connectionless)
이전의 정보들이 잘 있는것처럼 연속성있게 사용하기 위해
1. 쿠키-세션 방식의 인증
- 서버가 '특정 유저가 로그인 되었다'는 상태를 저장하는 방식
- 인증과 관련된 아주 약간의 정보만 서버가 가지고 있게 됨
- 인증과 관련된 최소한의 정보는 저장해서 로그인을 유지시킨다는 개념
- 사용자가 로그인 요청을 보냄
- 서버는 DB의 유저 테이블을 뒤져서 아이디 비밀번호를 대조
- 실제 유저테이블의 정보와 일치한다면 인증을 통과한 것으로 보고 "세션 저장소"에 해당 유저가 로그인 되었다는 정보를 넣음
- 세션 저장소에서는 유저의 정보와는 관련 없는 난수인 session-id를 발급
- 서버는 로그인 요청의 응답으로 session-id를 내어줌
- 클라이언트는 그 session-id를 쿠키라는 저장소에 보관하고 앞으로의 요청마다 세션아이디를 같이 보냄
- 클라이언트의 요청에서 쿠키를 발견했다면 서버는 세션 저장소에서 쿠키를 검증
- 만약 유저정보를 받아왔다면 이 사용자는 로그인이 되어있는 사용자!
- 이후에는 로그인 된 유저에 따른 응답을 내어줌
2. JWT 기반 인증
- JWT(JSON Web Token)
- 인증에 필요한 정보들을 암호화시킨 토큰
- JWT 기반 인증은 쿠키/세션 방식과 유사하게 JWT토큰(Access Token)을 HTTP 헤더에 실어 서버가 클라이언트를 식별함
- 사용자가 로그인 요청을 보냄
- 서버는 DB의 유저 테이블을 뒤져서 아이디 비밀번호를 대조
- 실제 유저테이블의 정보와 일치한다면 인증을 통과한 것으로 보고 유저의 정보를 JWT로 암호화 해서 내보냄
- 서버는 로그인 요청의 응답으로 JWT 토큰을 내어줌
- 클라이언트는 그 토큰을 저장소에 보관하고 앞으로의 요청마다 토큰을 같이 보냄
- 클라이언트의 요청에서 토큰을 발견했다면 서버는 토큰을 검증함
- 이후에는 로그인 된 유저에 따른 응답을 내어줌