본문 바로가기

DEVELOP/Node.js

[Authentication] Cookie/Session

반응형

학습 내용

  • HTTP와 HTTPS의 차이점
  • 권한 부여(Authorization)와 인증(Authentication)
  • Cookie/Session

HTTP, HTTPS, SSL

  • HTTP : 브라우저에서 웹 클라이언트와 서버 간에 데이터를 전송하기 위한 통신 규약. 암호화 되어있지 않기 때문에 서버와 클라이언트 사이에서 전송되는 데이터의 보안이 취약하다.
  • HTTPS : SSL나 TLS (이전 SSL이 TLS로 이름이 바뀐 것이기 때문에 사실상 둘은 같은 말이지만, 일반적으로는 TLS가 SSL이란 이름으로 사용된다.) 을 이용해서, HTTP 통신을 하는 과정에서 내용을 암호화하여 데이터를 전송한다.
  • SSL : SSL 인증서는 클라이언트와 서버 간의 데이터 전송을 위한 통신을 제 3자가 보증하는 문서이며, 클라이언트가 서버에 접속한 후 서버가 클라이언트에게 인증서 정보를 전달한다. 클라이언트에서는 인증서의 정보를 신뢰할 수 있는지 검증한다. SSL은 공캐 키 방식과 대칭 키 방식이 있다. 

 

인증서 발급

1. mkcert 설치 

 

$ brew install mkcert

 

2. 인증서 생성 

 

# 로컬을 인증된 발급기관으로 추가
$ mkcert -install

 

localhost라는 로컬 환경에 대한 인증서는 다음과 같이 생성한다.

 

$ mkcert -key-file key.pem -cert-file cert.pem localhost 127.0.0.1 ::1

 

key.pem은 개인키이므로 공개 되어서는 안되기 때문에 암호처럼 다뤄야 하며, git에 커밋할 때는 gitignore에 추가해 주어야 한다. 

 


Cookie

쿠키는 클라이언트 로컬에 저장된다. 키와 값이 들어있으며, 다음과 같은 옵션들을 가진다.

  1. Domain : 서버에 접속할 수 있는 이름 (포트, www와 같은 서브 도메인, 세부 경로는 전부 포함하지 않는다.)
  2. Path : 서버가 라우팅을 할 때 사용하는 경로
  3. MaxAge or Expires : 쿠키가 유효한 기간을 설정한다. MaxAges는 앞으로 몇 초간 쿠키가 유효한지를 설정한다. Expires는 언제까지 유효할 것인지 Date를 클라이언트의 시간을 기준으로 지정한다. 유효한 기간이 지나면 쿠키는 자동으로 파괴된다. 만약 두 옵션이 모두 설정되어있지 않다면 브라우저의 탭을 종료해야 쿠키가 제거된다. 
  4. Secure : 쿠키 전송 시에 프로토콜에 따른 쿠키의 전송 여부를 결정하며, true로 값을 설정할 경우에는 HTTPS 프로토콜을 사용해 통신해야만 쿠키를 전송할 수 있도록 한다.
  5. HttpOnly : 자바스크립트에서 브라우저의 쿠키에 접근할 수 있는지에 대한 여부를 결정하며, true로 값을 설정할 경우에는 자바스크립트로 쿠키에 접근하는 것이 불가능하다. 따로 명시해 주지 않는다면 false로 지정된다.
  6. SameSite : Cross-Origin 요청이 있을 경우에는 해당 항목의 옵션과 요청의 메소드를 통해 전송 여부를 결정한다. 옵션들의 종류는 다음과 같다. 
Lax Cross-Origin 요청이라면 GET 메소드에 대해서만 쿠키 전송 가능
Strict Cross-Origin이 아닌 same-site(요청을 보낸 origin과 서버의 도메인이 같다.)의 경우에만 쿠키를 전송 가능
None 항상 쿠키를 보낼 수 있으나, 쿠키 옵션 중 secure 옵션이 필요.

 

Session 

세션은 서버에 접속한 후 브라우저를 종료할 때 까지 유지된다. 웹 브라우저가 서버에 요청을 하면, 서버가 클라이언트에 Session Id를 부여하고 서버가 응답할 때 HTTP 헤더 중 Set-Cookie에 Session ID를 포함하여 전송한다. 이후에 클라이언트에서는 브라우저가 종료되기 전까지 다음 요청에 Session ID가 담겨있는 쿠키를 헤더에 넣어서 전송한다. 서버에서는 해당 ID를 확인한 뒤 세션에 대한 정보를 확인하고 응답한다. 

 


더 공부해봐야 할 내용

  • 암호화, hashing, salting
  • express-session

 

반응형

'DEVELOP > Node.js' 카테고리의 다른 글

MVC 패턴이란 무엇인가?  (0) 2021.06.17
[Auth] Session과 Token은 서로 절충 가능한가?  (0) 2021.06.16