인증 방식
쿠키-세션 인증 방식
쿠키-세션 방식은 서버가 ‘특정 유저가 로그인 되었다’는 상태를 저장하는 방식이다. 인증과 관련된 아주 약간의 정보만 서버가 가지고 있게 되고 유저의 이전 상태의 전부는 아니더라도 인증과 관련된 최소한의 정보는 저장해서 로그인을 유지시킨다.
인증 과정
- 사용자가 로그인 요청을 보낸다.
- 서버는 DB의 유저 테이블을 뒤져서 아이디 비밀번호를 대조해본다.
- 실제 유저테이블의 정보와 일치한다면, 인증을 통과한 것으로 보고 “세션 저장소”에 해당 유저가 로그인 되었다는 정보를 넣는다.
- 세션 저장소에서는 유저의 정보와는 관련 없는 난수인 session-id를 발급한다.
- 서버는 로그인 요청의 응답으로 session-id를 내어준다.
- 클라이언트는 그 session-id를 쿠키라는 저장소에 보관하고, 앞으로의 요청마다 세션아이디를 같이 보낸다. (주로 HTTP header에 담아서)
- 클라이언트의 요청에서 쿠키를 발견했다면 서버는 세션 저장소에서 쿠키를 검증한다.
- 만약 로그인이 되어있는 사용자가 맞다면, 유저정보를 가져온다.
- 요청한 데이터(유저정보)를 포함한 응답을 내어준다.
토큰 기반 인증 방식(JWT)
JWT(JSON Web Token)란 인증에 필요한 정보들을 암호화시킨 토큰을 의미한다. JWT 기반 인증은 쿠키/세션 방식과 유사하게 JWT 토큰(Access Token)을 HTTP 헤더에 실어 서버가 클라이언트를 식별한다.
Token
인증을 위해 사용되는 암호화된 문자열
- 사용자가 인증에 성공하면 서버는 토큰을 생성해서 클라이언트로 전송
- 토큰도 세션과 마찬가지로 사용자가 보내는 요청에 포함
- 토큰을 사용하면 요청을 받은 서버는 토큰이 유효한지를 확인만 함
- 세션 인증에 비해 서버 운영의 효율이 더 좋음
인증 과정
- 사용자가 로그인 요청을 보낸다.
- 서버는 DB의 유저 테이블을 뒤져서 아이디 비밀번호를 대조해본다.
- 실제 유저테이블의 정보와 일치한다면, 인증을 통과한 것으로 보고 유저의 정보를 JWT로 암호화 해서 내보낸다.
- 서버는 로그인 요청의 응답으로 jwt 토큰을 내어준다.
- 클라이언트는 그 토큰을 저장소에 보관하고 앞으로의 요청마다 토큰을 같이 보낸다.
- 클라이언트의 요청에서 토큰을 발견했다면 서버는 토큰을 검증한다.
- 요청한 데이터(유저정보)를 포함한 응답을 내어준다.
Reference
🔗 https://velog.io/@kingth/%EC%84%9C%EB%B2%84-%EC%9D%B8%EC%A6%9D-%EB%B0%A9%EC%8B%9D%EC%84%B8%EC%85%98%EC%BF%A0%ED%82%A4-%ED%86%A0%ED%81%B0