오봉이와 함께하는 개발 블로그
HTTP - 인증, 쿠키 본문
728x90
인증
- Authorization
- WWW-Authenticate
Authorization
클라이언트 인증 정보를 서버에 전달
- Authorization: Basic xxxxxxxxxxxxxxxx
인증과 관련해서 여러 메커니즘이 있는데 메커니즘마다 value에 들어가는 값이 다르다.
하지만 HTTP Authorization 헤더는 메커니즘에 관계없이 제공한다.
WWW-Authenticate
리소스 접근시 필요한 인증 방법 정의
- 리소스 접근시 필요한 인증 방법 정의
- 401 Unauthorized 응답과 함께 사용
- WWW-Authenticate: Newauth realm="apps", type=1, title="Login to "apps"", Basic realm="simple"
- 인증을 하려면 위 정보를 참고해서 제대로된 인증을 받으라고 서버에서 클라이언트로 반환한다.
쿠키
- Set-Cookie : 서버에서 클라이언트로 쿠키 전달(응답)
- Cookie : 클라이언트가 서버에서 받은 쿠키를 저장하고, HTTP 요청시 서버로 전달
쿠키 미사용
안녛하세요. 홍길동님이라는 결과를 원했지만, 로그인 이후에도 쿠키를 사용하지 않았기 때문에 로그인 정보가 존재하지 않아서 안녕하세요. 손님이라 응답한다.
Stateless
- HTTP는 무상태(Stateless) 프로토콜이다.
- 클라이언트와 서버가 요청과 응답을 주고 받으면 연결이 끊어진다.
- 클라이언트가 다시 요청하면 서버는 이전 요청을 기억하지 못한다.
- 클라이언트와 서버는 서로 상태를 유지하지 않는다.
쿠키 미사용 - 대안 : 모든 요청에 사용자 정보 포함
문제
모든 요청에 정보를 넘긴다!
- 보안에 문제가 있다.
- 모든 요청에 사용자 정보가 포함되도록 개발해야함
- 개발 편의성 매우 저하
- 브라우저를 완전히 종료하고 다시 열면?
- 웹 스토리지라는 대안이 있긴 있다.
쿠키 사용
쿠키 저장소에서 값을 찾기 때문에 모든 요청에 정보를 넘기는 방식에 비해서 개발 편의성도 향상된다.
하지만, 모든 요청에 쿠키 정보를 자동 포함되게 하면 보안에 문제가 있기 때문에 제약할 수 있는 방법이 존재한다.
쿠키 정보
- 예 : set-cookie: sessionId=abcde1234; expires=Sat, 26-Dec-2020 00:00:00 GMT; path=/; domain=.google.com; Secure
- sessionId : 세션 아이디
- expires : 만료 시간
- path : 어떤 경로에서 허용하는지
- Secure : 보안 정보
- domain : 어떤 도메인에서 사용하는지
- 사용처
- 사용자 로그인 세션 관리
- 서버에 저장된 세션에 세션 아이디로 정보에 접근해서 값을 얻어온다.
- 광고 정보 트래킹
- 사용자 로그인 세션 관리
- 쿠키 정보는 항상 서버에 전송됨
- 네트워크 트래픽 추가 유발
- 최소한의 정보만 사용(세션id, 인증 토큰)
- 서버에 전송하지 않고, 웹 브라우저 내부에 데이터를 저장하고 싶으면 웹 스토리지(localStorage, sessionStorage) 참고
- 주의사항
- 보안에 민감한 데이터는 저장하면 안 된다.(주민등록번호, 신용카드 번호 등)
쿠키 - 생명주기
Expires, max-age
- Set-Cookie: expires=Sat, 26-Dec-2020 04:39:21 GMT
- 만료일이 되면 쿠키 삭제
- Set-Cookie: max-age=3600 (3600초)
- 0이나 음수를 지정하면 쿠키 삭제
- 세션 쿠키 : 만료 날짜를 생략하면 브라우저 종료시 까지만 유지
- 영속 쿠키 : 만료 날짜를 입력하면 해당 날짜까지 유지
쿠키 - 도메인
Domain
- 예 : domain=example.org
- 명시 : 명시한 문서 기준 도메인 + 서브 도메인 포함
- domain=example.org를 지정해서 쿠키 생성
- example.org는 물론이고
- dev.example.org도 쿠키 접근
- domain=example.org를 지정해서 쿠키 생성
- 생략 : 현재 문서 기준 도메인만 적용
- example.org에서 쿠키를 생성하고 domain 지정을 생략
- example.org에서만 쿠키 접근
- dev.example.org는 쿠키 미접근
- example.org에서 쿠키를 생성하고 domain 지정을 생략
쿠키 - 경로
Path
- 예 : path=/home
- 이 경로를 포함한 하위 경로 페이지만 쿠키 접근
- 일반적으로는 path=/ root path로 지정한다.
- 예시
- path=/home 지정
- /home -> 가능
- /home/level1 -> 가능
- /home/level1/level2 -> 가능
- /hello -> 불가능
- path=/home 지정
쿠키 - 보안
Secure, HttpOnly, SameSite
- Secure
- 쿠키는 http, https를 구분하지 않고 클라이언트에서 서버로 쿠키를 전송한다.
- Secure를 적용하면 https인 경우에만 클라이언트에서 서버로 쿠키를 전송함.
- HttpOnly
- XSS 공격 방지
- 자바스크립트에서 쿠키에 접근 불가(document.cookie)
- HTTP 전송에만 사용
- SameSite
- XSRF 공격 방지
- 요청 도메인과 쿠키에 설정된 도메인이 같은 경우만 쿠키 전송
- 기능을 지원한지 얼마 되지 않았기 때문에 브라우저에서 지원하는지 체크하고 사용해야 한다.
인프런 김영한 지식 공유자님의 강의 - 모든 개발자를 위한 HTTP 웹 기본 지식
728x90
'이론' 카테고리의 다른 글
HTTP - 검증 헤더와 조건부 요청 (캐시) (0) | 2022.08.08 |
---|---|
HTTP - 캐시 기본 동작 (0) | 2022.08.08 |
HTTP - 콘텐츠 협상, 전송 방식, 일반 정보, 특별한 정보 (0) | 2022.08.07 |
HTTP - HTTP 헤더 개요, 표현 (0) | 2022.08.06 |
HTTP - 4xx 클라이언트 오류, 5xx 서버 오류 (0) | 2022.08.06 |
Comments