cs

[컴퓨터 네트워크] 인증 인가 방식(쿠키 / 세션 / JWT)

<Eunhak> 2024. 8. 27. 13:27

쿠키

클라이언트에 저장할 목적으로 생성한 작은 정보를 담은 파일

 

브라우저는 서버에서 받은 쿠키를 저장해두었다가,동일한 서버로 재요청할 때 쿠키를 함께 보냄

 

 

사용자가 로그인을 하면, 서버는 ID, PW 정보를 쿠키에 담아 브라우저로 다시 보냄

=>이후 브라우저에서는 요청할 때마다 로그인 정보가 담긴 쿠키를 함께 서버로 보냄

브라우저에서 매번 요청할 때마다 서버 입장에서는 로그인 정보가 담긴 쿠키를 받게 되는 것

 

장점

기존 로그인 정보를 사용하기 때문에 인증을 위한 추가적인 데이터 저장이 필요 없음

 

단점

사용자의 주요 정보를 매번 요청에 담기 때문에 보안상 문제가 있음

클라이언트에서 쿠키 정보를 쉽게 변경, 삭제할 수 있고, 가로채기 당할 수도 있음.

쿠키 사이즈가 커질수록 네트워크 부하가 심해짐

 

 

세션

 

 

서버에서 일정시간 클라이언트 상태를 유지하기 위해 사용

서버에서 클라이언트별 세션 ID를 부여하고 세션정보를 서버에 저장함

세션ID : 사용자를 식별하기 위한 용도

 

서버에서 생성한 세션ID는 클라이언트의 쿠키값으로 저장됨

이 쿠키를 통해 서버에서 유저 식별 가능

 

장점

세션 저장소를 사용하기에 요청할 때마다 회원 DB를 사용할 필요 없음

사용자의 로그인정보를 주고받지 않기에 상대적으로 안전

 

단점

세션ID 생성 후 서버에 저장해야하는 작업이 생김

요청이 많아지면 서버 부하 심해짐

 

 

JWT

JWT란?
=> 인증에 필요한 정보를 암호화시킨 토큰

JWT 토큰을 헤더에 담아 서버가 클라이언트를 식별함

 

 

 

 

작동방식

  1. 클라이언트가 ID, PW 로그인 요청을 보냄
  2. 회원 DB에서 사용자를 확인
  3. 로그인 성공 시, 서버는 로그인 정보를 Payload에 담고, Secret Key를 사용해서 Access Token(JWT)을 발급
  4. 서버가 JWT를 Client에 전달. 이 때 전달방법은 개발자가 정함
  5. ex) 응답 Header에 Authorization: BEARER <JWT> 형태로 전달
  6. 클라이언트는 전달받은 토큰(JWT)을 저장.(쿠키, local storage 등)
  7. 클라이언트가 서버에 요청할 때마다 토큰(JWT)을 요청 Header의 Authorization 에 포함시켜 함께 전달
  8. 서버는 클라이언트가 전달한 토큰의 Signature를 secret Key로 복호화한 후, 위변조 여부 및 유효기간을 검증한
  9. 검증에 성공하면, JWT에서 사용자 정보를 확인하고 요청에 응답

 

 

 

JWT 장점

동시 접속자가 많을 때 서버 부하를 낮춤

클라이언트, 서버가 다른 도메인을 사용할 때 사용 가능

ex) 카카오 OAuth2 로그인 시 JWT 토큰 사용 

인증 정보를 서버에 별도로 저장할 필요가 없다. → 서버의 Stateless 특성이 유지됨

JWT 단점

구현 복잡도가 증가

JWT에 담는 내용이 커질수록 네트워크 비용이 증가

Secret Key 유출 시 JWT 조작이 가능

Payload 자체는 암호화되지 않기 때문에 사용자의 중요한 정보는 담을 수 없음