Search
Duplicate
📒

[Network Study] xx.x HTTP 헤더1(일반헤더) - 인증, 쿠키

상태
미진행
수업
Network Study
주제
HTTP
4 more properties
참고

HTTP 헤더 - 인증

NOTE

인증 - Authorization (요청)

NOTE
클라이언트 인증 정보를 서버에 전달
value 값은 인증방식(OAuth)에 따라 다양함(필요하면 검색)

인증 - WWW-Authenticate (응답)

NOTE
리소스 접근시 필요한 인증 방법 정의
401 Unauthorized 응답과 함께 사용

쿠키(Cookie)

NOTE
쿠키 정보는 항상 서버에 전송된다!
네트워크 트래픽 추가 유발
최소한의 정보만 사용(sessionId, 인증 토큰)
Set-Cookie : 서버 → 클라이언트 쿠키 전달(응답)
Cookie : 클라이언트가 서버에서 받은 쿠키를 저장, 클라이언트→서버 쿠키 전달(요청)
쿠키 생성, 접근 과정 정리
1.
웹 브라우저가 id, password를 담아 서버에 로그인 요청
2.
서버는 id, password 검증에 성공하면, 해당 사용자에 대한 sessionId(쿠키)를 생성함
3.
서버는 Set-CookiesessionId를 담아 웹 브라우저에 로그인 성공을 응답
4.
웹 브라우저는 쿠키 저장소에 sessionId(쿠키)를 저장
5.
이후 웹 브라우저가 쿠키 접근가능한 도메인 요청을 보낼 때마다 자동으로 쿠키 저장소에서 꺼낸 sessionId(쿠키)를 Cookie에 담아 서버에 요청 보냄
6.
서버는 sessionId(쿠키)의 유효성을 검사해 클라이언트를 식별함

쿠키 - 쿠키 미사용

NOTE
1.
처음 welcome 페이지 접근
로그인하지 않은 사용자가 서버에 /welcome을 요청하면, 서버는 ~손님을 응답함
2.
로그인
사용자가 id, password 정보를 담아 서버에 /login을 POST로 요청하면, 서버는 로그인 성공 응답을 한다.
3.
로그인 이후 welcome 페이지 접근
사용자가 로그인 이후 서버에 /welcome을 요청하면, 서버는 로그인한 사용자임을 구분할 수 없기때문에 ~손님을 응답한다.
HTTP 무상태(Stateless) 프로토콜이다.
클라이언트와 서버가 요청, 응답을 주고 받은 후 연결이 끊어진다.
클라이언트가 재요청을 하면 서버는 이전 요청을 기억하지 못한다
클라이언트와 서버는 서로 상태를 유지하지 않는다!
4.
대안 - 모든 요청과 링크에 사용자 정보 포함?
모든 요청에 사용자 정보를 넘기는 문제가 있다!!
모든 요청에 사용자 정보를 넘긴다? → 해고당함
브라우저를 종료하고 다시 열면 Web Storage에 저장해놓고 다시 넘겨야 함

쿠키 - 쿠키 사용

NOTE
1.
로그인
웹 브라우저가 id, password를 담아 POST로 /login을 서버에 요청하면, 서버는 Set-Cookie에 유저 정보를 담아 클라이언트에 응답한다. → 클라이언트 웹 브라우저의 쿠키 저장소에 쿠키를 저장한다!
2.
로그인 이후 welcome 페이지 접근
로그인 이후, 웹 브라우저가 자동으로 Cookie를 담아 /welcome를 서버에 요청하면, 서버는 쿠키를 확인해서 로그인한 유저를 확인하고 응답을 한다.
3.
해결 - 모든 요청에 쿠키 정보 자동포함
로그인 이후, 웹 브라우저가 요청을 보낼 때 자동으로 쿠키 저장소에서 꺼낸 쿠키를 담아 요청을 보낸다!!

쿠키 - 쿠기 속성(생명주기)

NOTE
1.
expires : 만료날짜 설정 (사용 권장하지않음)
2.
max-age : 초단위 설정 (주로 쓰임)
쿠키종류
세션 쿠키 : 만료 날짜를 생략하면 브라우저 종료시까지만 유지
영속 쿠키 : 만료 날짜를 입력하면 해당 날짜까지 유지(브라우저가 종료되어도 클라이언트 시간이 남아있는 한 유지됨)

쿠키 - 쿠기 속성(도메인)

NOTE
1.
명시 : 명시한 문서 기준 도메인 + 서브 도메인 포함 적용
domain = example.org를 지정하고 쿠키 생성
example.orgdev.example.org(서브 도메인) 도 쿠키 접근 O
2.
생략 : 현재 문서 기준 도메인만 적용
example.org에서 쿠키 생성, domain 지정 생략
example.org 에서만 쿠키 접근 O
dev.example.org(서브 도메인)은 쿠키 미접근

쿠키 - 쿠기 속성(경로)

NOTE
이 경로를 포함한 하위 경로 페이지만 접근 가능
일반적으로 path=/ 루트로 지정함

쿠키 - 쿠기 속성(보안)

NOTE
1.
Secure
https인 경우에만 쿠키를 전송한다
2.
HttpOnly
XSS(자바스크립트 코드 공격) 방지
자바스크립트에서 쿠키 접근 X, HTTP 전송에서만 쿠키 사용
3.
SameSite
XSRF 공격 방지 목적
요청 도메인과 쿠키에 설정된 도메인이 같은 경우만 쿠키 전송

쿠키 질문정리

Q. http 통신을 하는 상황에서 로그인을 한 후 set-cookie로 발급받은 sessionId(쿠키 정보)를 해커에게 탈취당하면 해커는 해당 sessionId를 이용해 제 아이디로 로그인한 상황이 되는 건가요?

해커에게 sessionId를 탈취당한다면 위와같은 상황이 발생한다
그러므로 구간 암호화를 위해 HTTPS를 사용하고 session의 생존 기간을 짧게 가져간다.

Q. 쿠키 미접근이라는 것은 정확히 어떤 의미인가요?

사용자가 로그인을 한다 → 서버에서 sessionId를 생성하고 set-cookie를 통해 응답한 쿠키를 웹 브라우저의 쿠키 저장소에 sessionId를 저장한다.
만약 브라우저에서 쿠키 미접근 도메인에 요청을 보내면, 애초에 요청을 보낼때 쿠키 저장소에서 쿠키를 꺼내지 않고 요청을 보낸다.

Q. 쿠키와 세션? 세션 쿠키에서 쿠키의 만료날짜를 생략하면 브라우저 종료시까지만 쿠키를 유지한다고 했는데, 서버에서는 웹 브라우저가 종료되었다는 사실을 모를텐데 언제까지 세션을 보관하고 있나요?

쿠키는 브라우저(클라이언트), 세션은 서버에서 관리하는 정보다
다만 서버가 특정 클라이언트에 대한 정보를 기억하기 위해 쿠키 값을 매번받아 내부에 있는 세션 값과 비교하는 방식으로 쿠키를 사용하는 것
웹 서버를 사용하는 프레임워크나 개발자에 따라 세션은 다르게 설정될 수 있다
Spring boot의 경우 1800초로 세션이 지속되고 maxIntervalTimeout으로 특정 세션값을 마지막으로 사용한 시점으로 부터 어느정도 지나면 서버에서 세션값을 지운다.