웹의 인증 및 인가
인증(Authentication) : 사용자 신원을 확인하는 행위 (로그인, 아이디 패스워드)
인가(Authorization) : 사용자 권한을 확인하는 행위 (역할에 따른 접근권한, ex) 카페 등급)
- 인증: 회사 출입을 위한 출입증 확인 혹은 생체정보 (지문, 홍채) 인식
- 인가: 회사 건물 내 접근 권한 관리
- 방문자 → 회의실만 접근 가능
- 직원 → 회의실, 사무실 접근 가능
- 관리자 → 회의실, 사무실, 서버실, 물품보관실 접근 가능
쿠키와 세션
쿠키나 세션이 필요한 이유
HTTP는 상태를 저장하지않습니다, ('Stateless' 하다)
이게 무슨 말이나면, 아래의 그림에서 클라이언트의 요청(Request)을 서버에 보낸 후 응답(Response)를 받을 때까지가 하나의 HTTP 요청입니다.
하지만 HTTP 상태는 기억되지 않기 때문에 웹서비에서는 1번과 2번이 같은 클라이언트의 요청인지 알 수 없습니다.
✅ 쿠키와 세션 모두 HTTP에 상태 정보를 유지(statefull)하기 위해 사용됩니다. 즉, 쿠키와 세션을 통해 서버에서는 클라이언트 별로 인증 및 인가를 할 수 있게 됩니다.
1. 쿠키
- 클라이언트에 저장될 목적으로 생성한 작은 정보를 담은 파일 입니다.
- 쿠키는 브라우저(클라이언트)에 저장되어, 도메인 별로 저장이 되어있습니다.
- 클라이언트인 웹 브라우저에 저장된 '쿠키' 를 확인해 보죠.
- 크롬 브라우저 기준으로 '개발자도구' 를 열어 보세요.
- Application - Storage - Cookies 에 도메인 별로 저장되어 있는게 확인 됩니다.
- 쿠키 구성요소
- Name (이름): 쿠키를 구별하는 데 사용되는 키 (중복될 수 없음)
- Value (값): 쿠키의 값
- Domain (도메인): 쿠키가 저장된 도메인
- Path (경로): 쿠키가 사용되는 경로
- Expires (만료기한): 쿠키의 만료기한 (만료기한 지나면 삭제됩니다.)
2. 세션
- 서버에서 일정시간 동안 클라이언트 상태를 유지하기 위해 사용 (쿠키는 - 브라우저 / 세션은 -서버에 저장)
- 서버에서 클라이언트 별로 유일무이한 '세션 ID' 를(Token) 부여한 후 클라이언트 별 필요한 정보를 서버에 저장
- 서버에서 생성한 '세션 ID' 는 클라이언트의 쿠키값('세션 쿠키' 라고 부름)으로 저장되어 클라이언트 식별에 사용됨
- 세션 동작 방식
- 클라이언트가 서버에 1번 요청
- 서버가 세션ID 를 생성하고, 응답 헤더에 전달
- 세션 ID 형태: "SESSIONID = 12A345"
- 클라이언트가 쿠키를 저장 ('세션쿠키')
- 클라이언트가 서버에 2번 요청
- 쿠키값 (세션 ID) 포함하여 요청
- 서버가 세션ID 를 확인하고, 1번 요청과 같은 클라이언트임을 인지
쿠키와 세션의 차이점
가장 큰 차이는 쿠키는 도메인 별로 브라우저에 저장되어 클라이언트에서 값이 가로채지거나 수정되어질 수 있고,
세션은 쿠키에 들어있는 세션 ID를 이용해 서버에서 인증, 인가를 처리한다는 점이다. (조금 더 보안적)
다음은 스프링 시큐리티를 사용해보자!!
'Spring > Spring Boot' 카테고리의 다른 글
[Spring] 스프링 시큐리티 - 카카오 소셜로그인 하기(OAuth) (4) | 2021.12.04 |
---|---|
[Spring] 스프링 시큐리티 사용하기 - spring security (로그인, 로그아웃, 회원가입) (0) | 2021.12.04 |
Spring Putmapping Json 과 File 데이터 함께 전송하기(Form data) (6) | 2021.12.03 |
[Spring] JPA FindAll<Entity> to convert DTO (ModelMapper) (0) | 2021.12.03 |
[Spring] JPA 매핑 연관관계 - 게시글에 댓글 달기 (0) | 2021.12.03 |