은학의 코딩 일기장
[컴퓨터 네트워크] 인증 인가 방식(쿠키 / 세션 / JWT) 본문
쿠키
클라이언트에 저장할 목적으로 생성한 작은 정보를 담은 파일
브라우저는 서버에서 받은 쿠키를 저장해두었다가,동일한 서버로 재요청할 때 쿠키를 함께 보냄
사용자가 로그인을 하면, 서버는 ID, PW 정보를 쿠키에 담아 브라우저로 다시 보냄
=>이후 브라우저에서는 요청할 때마다 로그인 정보가 담긴 쿠키를 함께 서버로 보냄
브라우저에서 매번 요청할 때마다 서버 입장에서는 로그인 정보가 담긴 쿠키를 받게 되는 것
장점
기존 로그인 정보를 사용하기 때문에 인증을 위한 추가적인 데이터 저장이 필요 없음
단점
사용자의 주요 정보를 매번 요청에 담기 때문에 보안상 문제가 있음
클라이언트에서 쿠키 정보를 쉽게 변경, 삭제할 수 있고, 가로채기 당할 수도 있음.
쿠키 사이즈가 커질수록 네트워크 부하가 심해짐
세션
서버에서 일정시간 클라이언트 상태를 유지하기 위해 사용
서버에서 클라이언트별 세션 ID를 부여하고 세션정보를 서버에 저장함
세션ID : 사용자를 식별하기 위한 용도
서버에서 생성한 세션ID는 클라이언트의 쿠키값으로 저장됨
이 쿠키를 통해 서버에서 유저 식별 가능
장점
세션 저장소를 사용하기에 요청할 때마다 회원 DB를 사용할 필요 없음
사용자의 로그인정보를 주고받지 않기에 상대적으로 안전
단점
세션ID 생성 후 서버에 저장해야하는 작업이 생김
요청이 많아지면 서버 부하 심해짐
JWT
JWT란?
=> 인증에 필요한 정보를 암호화시킨 토큰
JWT 토큰을 헤더에 담아 서버가 클라이언트를 식별함
작동방식
- 클라이언트가 ID, PW 로그인 요청을 보냄
- 회원 DB에서 사용자를 확인
- 로그인 성공 시, 서버는 로그인 정보를 Payload에 담고, Secret Key를 사용해서 Access Token(JWT)을 발급
- 서버가 JWT를 Client에 전달. 이 때 전달방법은 개발자가 정함
- ex) 응답 Header에 Authorization: BEARER <JWT> 형태로 전달
- 클라이언트는 전달받은 토큰(JWT)을 저장.(쿠키, local storage 등)
- 클라이언트가 서버에 요청할 때마다 토큰(JWT)을 요청 Header의 Authorization 에 포함시켜 함께 전달
- 서버는 클라이언트가 전달한 토큰의 Signature를 secret Key로 복호화한 후, 위변조 여부 및 유효기간을 검증한
- 검증에 성공하면, JWT에서 사용자 정보를 확인하고 요청에 응답
JWT 장점
동시 접속자가 많을 때 서버 부하를 낮춤
클라이언트, 서버가 다른 도메인을 사용할 때 사용 가능
ex) 카카오 OAuth2 로그인 시 JWT 토큰 사용
인증 정보를 서버에 별도로 저장할 필요가 없다. → 서버의 Stateless 특성이 유지됨
JWT 단점
구현 복잡도가 증가
JWT에 담는 내용이 커질수록 네트워크 비용이 증가
Secret Key 유출 시 JWT 조작이 가능
Payload 자체는 암호화되지 않기 때문에 사용자의 중요한 정보는 담을 수 없음
'cs' 카테고리의 다른 글
[컴퓨터 네트워크] URI URL URN (2) | 2024.08.28 |
---|---|
[컴퓨터 네트워크] SOP / CORS (0) | 2024.08.28 |
[컴퓨터 네트워크] DNS (0) | 2024.08.22 |
[컴퓨터 네트워크] HTTPS (0) | 2024.08.22 |
[컴퓨터 네트워크] HTTP (0) | 2024.08.22 |