웹 애플리 케이션 인증 방식중에는 쿠키와 세션 방식 그리고 JWT 방식이 있다.
그중에 쿠키-세션 방식의 인증을 알아보려고 한다.
쿠키- 세션 방식은 서버가 '특정 유저가 로그인 되었다'는상태를 저장하는 방식이다.
인증과 관련된 아주 약간의 정보만 서버가 가지고 있게 되고 유저의 이전 상태는 전부 아니더라도 인증과 관련된 최소한의 정보는 저장해서 로그인을 유지시킨다는 개념이다.
- 사용자가 로그인 요청을 보낸다.
- 서버는 DB의 유저 테이블을 뒤져서 아이디 비밀번호를 대조한다.
- 실제 유저테이블의 정보와 일치한다면 인증을 통과한 것으로 보고 “세션 저장소”에 해당 유저가 로그인 되었다는 정보를 넣는다.
- 세션 저장소에서는 유저의 정보와는 관련 없는 난수인 session-id를 발급한다.
- 서버는 로그인 요청의 응답으로 session-id를 내어준다.
- 클라이언트는 그 session-id를 쿠키라는 저장소에 보관하고 앞으로의 요청마다 세션아이디를 같이 보낸다. (주로 HTTP header에 담아서 보낸다)
- 클라이언트의 요청에서 쿠키를 발견했다면 서버는 세션 저장소에서 쿠키를 검증.
- 만약 유저정보를 받아왔다면 이 사용자는 로그인이 되어있는 사용자라면
- 이후에는 로그인 된 유저에 따른 응답을 내어준다.
에 상태 정보를 유지(Stateful)하기 위해 사용한다. 즉, 쿠키와 세션을 통해 서버에서는 클라이언트 별로 인증 및 인가를 할 수 있게 된다.
쿠키
클라이언트에 저장될 목적으로 생성한 작은 정보를담은 파일
클라이언트인 웹 브라우저에 저장된 쿠키를 확인해보면
크롬 기준으로 f12 개발자 도구를 열면 Application-Storage-Cookies에 도메인 별로 저장되어 있는게 확인 된다.
구성요소
- Name (이름): 쿠키를 구별하는 데 사용되는 키 (중복될 수 없음)
- Value (값): 쿠키의 값
- Domain (도메인): 쿠키가 저장된 도메인
- Path (경로): 쿠키가 사용되는 경로
- Expires (만료기한): 쿠키의 만료기한 (만료기한 지나면 삭제됩니다.)
세션
서버에서 일정시간 동안 클라이언트 상태를 유지하기 위해 사용
서버에서 클라이언트 별로 유일무이한 '세션 ID' 를 부여한 후 클라이언트 별 필요한 정보를 서버에 저장
서버에서 생성한 '세션 ID' 는 클라이언트의 쿠키값('세션 쿠키' 라고 부름)으로 저장되어 클라이언트 식별에 사용
세션 동작방식
- 클라이언트가 서버에 1번 요청
- 서버가 세션ID 를 생성하고, 쿠키에 담아 응답 헤더에 전달
- 세션 ID 형태: "SESSIONID = 12A345"
- 클라이언트가 쿠키에 세션ID를 저장 ('세션쿠키')
- 클라이언트가 서버에 2번 요청
- 쿠키값 (세션 ID) 포함하여 요청
- 서버가 세션ID 를 확인하고, 1번 요청과 같은 클라이언트임을 인지
Cookie | Session | |
저장 위치 | 클라이언트의 웹브라우저가 지정하는 메모리 또는 하드디스크 | 서버의 메모리, 데이터베이스등 |
보안 | 탈취와 변조 가능 | 세션ID 값만 가지고 있기 때문에 상대적으로 안전 |
저장 형식 | 텍스트 | Object |
만료 시점 | 쿠키 저장시 expires 속성을 정의 (삭제될 날짜를 지정할 수 잇음) |
클라이언트가 로그아웃, 일정시간동안 반응이 없으면 무효화 (정확한 시점을 알 수 없음) |
리소스 | 서버 자원을 사용하지 않음 | 요청마다 서버에서 처리하므로 비교적 느림 |
속도 | 파일에서 읽기 때문에 상대적으로 빠름 | 요청마다 서버에서 처리하므로 비교적 느림 |
용량제한 | 한 도메인당 20개 하나의 쿠키당4KB로 제한 |
클라이언트가 접속 시 서버에 의해 생성되므로 제한 없 |
'내일배움캠프' 카테고리의 다른 글
내일배움캠프TIL- 영속성 전이 (0) | 2024.01.30 |
---|---|
내일배움캠프TIL- JWT (0) | 2024.01.25 |
내일배움캠프 TIL - Spring Bean (1) | 2024.01.23 |
내일배움캠프 TIL - DTO를 클래스에서 record로 (0) | 2024.01.23 |
내일배움캠프TIL - IoC와 DI 관계 및 DI 집중 (0) | 2024.01.19 |