서버가 클라이언트를 인증하는 방식은 쿠키, 세션, 토큰 3가지 방식이 있다.
쿠키는 key - value 형식의 문자열 덩어리이다.
클라이언트가 웹사이트를 방문할 경우, 해당 사이트의 서버를 통해 클라이언트의 브라우저에 설치되는 작은 기록정보 파일이다.
이를 통해 각 사용자마다 브라우저의 정보를 저장하니 고유정보 식별이 가능하다.
<쿠키 인증방식>
브라우저(클라이언트)가 서버에 요청을 보낸다.
서버는 클라이언트의 요청에 대한 응답을 작성할 때, 클라이언트 측에 저장하고 싶은 정보를 응답 헤더의 set-cookie에 담는다.
이후 해당 클라이언트는 요청을 보낼때마다, 매번 저장된 쿠키를 요청 헤더의 cookie에 담아 보낸다. -> 서버는 쿠키에 담긴 정보를 바탕으로 해당 요청의 클라이언트가 누군지 식별하거나 정보를 바탕으로 추천 광고를 띄워준다.
<쿠키의 단점>
<쿠키 사용예시>
방문 사이트에서 로그인 시, "아이디와 비밀번호를 저장하시겠습니까?"
팝업창을 통해 "오늘 이 창을 다시 보지 않기" 체크
세션 객체는 key에 해당하는 session id와 이에 대응하는 value값으로 구성되어 있다.
value에는 세션 생성 기간, 마지막 접근 시간 및 user가 저장한 속성 등이 map형태로 저장된다.
쿠키의 보안적 이슈를 세션은 비밀번호 등 클라이언트의 민감한 인증 정보를 브라우저가 아닌 서버측에 저장하고 관리한다.
서버의 메모리 또는 로컬 파일이나 데이터베이스에 저장
<session 인증방식>
<session 단점>
<session 사용예시>
토큰 기반 인증 시스템은 클라이언트가 서버에 접속했을때 '토큰'부여
토큰은 유일하며 토큰을 발급받은 클라이언트는 서버에 요청을 보낼 때 요청 헤더에 토큰을 심어서 보냄
서버에서는 클라이언트로부터 받은 토큰을 서버에서 제공한 토큰과의 일치여부를 체크하여 인증
<토큰 단점>
JWT(JSON Web Token)란 인증에 필요한 정보들을 암호화시킨 JSON 토큰을 의미한다.
그리고 JWT 기반 인증은 JWT 토큰(Access Token)을 HTTP 헤더에 실어 서버가 클라이언트를 식별하는 방식이다
JWT는 JSON 데이터를 Base64 URL-safe Encode 를 통해 인코딩하여 직렬화한 것이며, 토큰 내부에는 위변조 방지를 위해 개인키를 통한 전자서명도 들어있다.
따라서 사용자가 JWT 를 서버로 전송하면 서버는 서명을 검증하는 과정을 거치게 되며 검증이 완료되면 요청한 응답을 돌려준다.
Header , Payload, Signature 세가지 문자열의 조합이다.
Jwt에서 사용할 타입, 해시 알고리즘의 종류 담겨져 있음
사용자 권한 정보와 데이터
Header, Payload 를 Base64 URL-safe Encode 를 한 이후 Header 에 명시된 해시함수를 적용하고, 개인키(Private Key)로 서명한 전자서명이 담겨있다.
전자서명에는 비대칭 암호화 알고리즘을 사용하므로 암호화를 위한 키와 복호화를 위한 키가 다르다. 암호화(전자서명)에는 개인키를, 복호화(검증)에는 공개키를 사용한다.
공부 링크:
https://inpa.tistory.com/entry/WEB-📚-JWTjson-web-token-란-💯-정리