More than TIL/Web

쿠키, 세션, JWT

코디번 KodeVvon 2022. 4. 13. 12:07

쿠키

  • HTTP의 일종으로서 인터넷 사용자가 어떠한 웹사이트를 방문할 경우 그 사이트가 사용하고 있는 서버를 통해 인터넷 사용자의 컴퓨터에 설치되는 작은 기록 정보 파일을 일컫는다.
  • 쿠키는 웹사이트 접속 시 접속자의 개인장치에 다운로드 되고 브라우저에 저장되는 작은 텍스트 파일이다.
  • 웹사이트는 쿠키를 통해 접속자의 장치를 인식하고, 접속자의 설정과 과거 이용내역에 대한 일부 데이터를 저장한다.
  • 이 기록 파일에 담긴 정보는 인터넷 사용자가 같은 웹사이트를 방문할 때마다 읽히고 수시로 새로운 정보로 바뀐다.
  • key = value형태를 가진다.
  • 쿠키는 사용자 인증에 대한 정보를 모두 클라이언트가 가지게 되므로 http요청을 탈취당하면 사용자의 정보를 모두 빼앗길 수 있다. 때문에 장바구니, 자동로그인 설정등에 이용할 수 있다.

동작 방식

1. 사용자가 로그인 요청

2. 서버에서 쿠키 생성 후 사용자에게 전달

3. 사용자가 서버로 요청을 보낼 때 쿠키를 전송

4. 쿠키를 이용해 사용자 인증 진행


세션

  • 웹 사이트의 여러 페이지에 걸쳐 사용되는 사용자 정보를 저장하는 방법.
  • 사용자가 브라우저를 닫아 서버와의 연결을 끝내는 시점까지를 세션이라고 한다.
  • 서비스가 돌아가는 서버 측에 데이터를 저장하고, 세션의 키값만을 클라이언트 측에 남겨둔다. 브라우저는 필요할 때마다 이 키값을 이용하여 서버에 저장된 데이터를 사용하게 된다. 쿠키보다 보안에 좋지만, 사용자가 많아지면 서버 메모리를 많이 차지한다.

동작 방식

1. 클라이언트가 로그인을 위해 정보를 서버에 전달

2. 서버에서 db에 사용자가 있는지 확인

3. 로그인 성공시 사용자에게 고유한 세션ID를 부여하고 세션 저장소에 저장

4. 사용자는 해당값을 쿠키에 저장

5. 이후 요청에는 헤더에 쿠키를 실어서 전달

6. 서버는 쿠키에 담겨있는 세션ID와 세션 저장소에 있는 정보와 대조한 후 일치 시 요청받은 데이터를 가져온다


JWT

  • Json Web Token의 약자로, 인증에 필요한 정보들을 암호화시킨 토큰을 말한다. 세션처럼 토큰 자체를 쿠키에 담아서 보내줄 수도 있고 HTTP 헤더에 담아서 보내줄 수도 있다. 3가지 요소로 구성된다
  • 1. Header : 정보를 암호화할 방식
  • 2. Payload : 서버에서 보낼 데이터, 일반적으로 유저 고유 ID 값, 유효 기간이 들어간다.
  • 3. Verify Signature : Header, payload와 Secret Key를 더해 만든다. Secret Key를 알지 못하면 복호화할 수 없다.
  • JWT는 발급한 후 검증만하면 되기 때문에 추가 저장소가 필요없다. 그래서 서버를 확장하거나 유지, 보수하는데 유리하다. 하지만 이미 발급된 JWT는 유효기간이 만료될 때까지 삭제가 불가능해 악의적으로 사용될 수 있다. 이 때 aceess token의 유효기간을 짧게 하고, refresh token이라는 새로운 토큰을 발급함으로써 피해를 조금이라도 줄일 수 있다.

 

동작 방식

1. 사용자가 로그인 요청

2. 서버에서 사용자 고유 ID와 다른 인증 정보들을 함께 Payload에 담는다.

3. JWT의 유효기간 설정 및 옵션 설정 후 Secret Key를 이용해 토큰을 발급.

4. 발급된 토큰은 사용자의 쿠키 혹은 로컬스토리지 등에 저장하여 요청을 보낼 때마다 헤더에 실어서 보낸다.

5. 서버는 토큰을 Secret Key로 복호화하여 검증하는 과정을 거친다.

6. 검증이 완료되면 서버가 대응하는 데이터를 보내준다.

'More than TIL > Web' 카테고리의 다른 글

UI 색상을 추천해주는 사이트(color tool)  (0) 2022.04.13
웹 서비스 HTTP통신 구조  (0) 2022.04.13
로렘 입숨(lorem ipsum)  (0) 2022.04.13
개발 공부에 유용한 사이트 CodePen  (0) 2022.04.13
에밋(Emmet)  (0) 2022.04.13