본문 바로가기

개발관련/Network

HTTP 쿠키와 세션, 그리고 JWT(Json Web Token)란?

반응형

참고

JWT 기반으로 사용자 인증 구현하기 : http://victorydntmd.tistory.com/116

JWT (Json Web Token) : http://victorydntmd.tistory.com/115

Cookie / Session / Cache : http://asfirstalways.tistory.com/68

HTTP 쿠키 : https://developer.mozilla.org/ko/docs/Web/HTTP/Cookies

Session을 이용해 로그인하기 : https://beomi.github.io/gb-crawling/posts/2017-01-20-HowToMakeWebCrawler-With-Login.html


---


(HTTP Cookie) 쿠키 : 서버쪽에서 클라이언트에게 전달하는 정보 -> 저장은 브라우저(Client Side)에서 담당


(Session) 세션 :일정 시간동안 같은 사용자(클라이언트)로부터 들어오는 일련의 요청(Request)를 하나의 상태로 보고 그 상태를 세션이라함 -> 세션 데이터 저장은 서버쪽(Server Side)에서 담당


(Json Web Token)JWT : 서버쪽에서 클라이언트에게 전달하는 쿠키를 JSON 객체에 담아 이를 암호화하고 해싱 작업을 거쳐 문자열 토큰을 생성한 뒤

이 토큰을 HTTP header에 실어 클라이언트에게 전달하는 방식. 이 토큰값은 클라이언트 사이드에서 변조할 수 없기 때문에 데이터 신뢰도가 높다.



기존의 쿠키, 세션으로 사용자 인증을 구현했던 방식에서 여러 문제점들이 생겨서 요즘에는 JWT 혹은 OAuth와 같은 토큰 기반 방식으로 사용자 인증을 구현한다고 한다.


쿠키로 사용자 인증을 관리할 시에는 쿠키 데이터를 클라이언트에서 수정 및 변경할 수 있기 때문에 데이터 신뢰도가 떨어지고,

세션으로 사용자 인증을 관리할 시에는 서버쪽의 메모리에 세션을 저장하기 때문에 서버 과부하의 원인이 된다.


하지만 JWT 방식의 사용자 인증은 정보가 담긴 데이터(JSON)를 암호화해서 HTTP 헤더에 추가시켜 보안성이 증가하고,

서버메모리에 저장하지 않기 때문에 서버쪽의 부담도 줄어들게 된다.


JWT방식의 사용자인증의 전반적인 동작 흐름은 다음과 같다.


사용자가 로그인하면 서버는 암호화된 JSON 형태의 토큰을 생성해서 브라우저 쿠키에 보관한다.

그리고 이 사용자가 어떤 API를 호출했을 때, HTTP 헤더를 뒤져 토큰이 있는지를 서버측에서 확인해서 

올바른 토큰이 있을 경우 API를 수행하고, 없으면 수행하지 않는다.



반응형