프로젝트를 하면서 인증에 관련된 부분을 진행하면서 지식의 부족함을 느꼈다.
그래서 생활코딩의 강의를 참고해서 공부를 진행하였다, 추후에 더 공부를 해야할 것 같다.
예제 코드
var http = require('http'); // 서버 모듈
var cookie = require('cookie'); // cookie를 파싱하는 모듈
http.createServer(function(req, res){
var cookies = {}; // 쿠키를 담을 객체
if (req.headers.cookie !== undefined) { // 쿠키 예외처리
cookies = cookie.parse(req.headers.cookie); // 객체에 헤더안의 쿠키를 파싱
}
res.writeHead(200, {
'Set-cookie': [ // 쿠키 응답
'qwer=qwer',
'zxcv=zxcv',
`EX=EX; Max-Age=${60*60*24*30}`, // 한달동안 남아있는 쿠키
'se=se; Secure', // https에서만 주고받는 쿠키
'web=web; HttpOnly', // 클라이언트단에서 조작 불가한 쿠키
'p=p; path=/cookie', // 쿠키의 유효 경로 설정
'd=d; Domain=o2.org', // 쿠키의 유효 도메인 설정
]
});
res.end('Cookie!!');
}).listen(3000);
쿠키란?
사용자의 개인화를 위해서 웹 브라우저상에 key=value 형태로 정보를 저장하는 것.
쿠키의 생성
쿠키를 생성할때는 응답에 Set-cookie: ['key'='value'] 형태로 선언해야 한다.
쿠키 읽기
쿠키가 만약 생성이 되어있다면, 요청 헤더에 쿠키가 들어가있다.
요청 헤더의 쿠키는 문자열로 들어온다.
객체 형태로 파싱을 하기 위해서는 cookie모듈의 parse()를 사용해야한다.
쿠키의 활용
쿠키의 값은 웹 브라우저상에 존재한다.
쿠키가 유출되면 보안상 굉장히 위험하다.
session 쿠키 VS Permanent 쿠키
session 쿠키 : 웹 브라우저를 끄면 사라지는 휘발성 쿠키
Permanent 쿠키 : 브라우저를 꺼도 사라지지 않는 쿠키 (대신 만료기한이 있다.)
Permanent 쿠키는 Expires와 Max-age로 설정 할 수 있다.
Expires : 언제까지 유효한가
Max-age : 현재 시간을 기준으로 유효한 기간을 정함. (초단위)
Secure && HttpOnly
Secure : https를 사용하는 경우만 웹 브라우저가 쿠키를 서버로 전송하는 옵션
HttpOnly : JS의 document.cookie를 이용해서 쿠키에 접속하는 것을 막는 옵션
path && Domain
path : 쿠키가 유효한 경로를 지정
Domain : 쿠키가 지정해준 도메인에서도 살아있을 수 있다.
인증 기능 구현
로그인 : 쿠키값을 이용해서 각 페이지가 실행될때마다 로그인을 확인한다.
로그아웃 : 쿠키의 수명을 없애서 로그아웃을 시킨다.
수업을 마치며
쿠키는 클라이언트단에서 저장되어있기 때문에 중요한 정보는 세션에 저장해야한다.
세션은 서버에 저장되기 때문에 보안상 더 유리하다. 대부분 세션을 사용한다고 한다.
브라우저에 정보를 저장하는 방식이 더 많이 있다.
쿠키는 4KB밖에 저장할 수 없다. localStorage, Indexed DB는 더 많이 저장할 수 있다.
정보를 평문으로 저장하는것은 보안적으로 매우 위험하다.
hash, salt등 다양한 암호화 방식에 대해 공부하고, PBKDF2, bcrypt같은 라이브러리 공부할것.
'개발 > Node.js (NestJS)' 카테고리의 다른 글
[Node.js] Passport (로컬 로그인 with session) (0) | 2022.01.19 |
---|---|
[Node.js] Session 공부 (0) | 2022.01.07 |
[Node.js] Node.js에 MVP 패턴을 적용하기 (0) | 2021.12.24 |
[Node.js] dotenv 적용하기 (0) | 2021.12.24 |
[Node.js] nodemailer를 이용한 메일 전송 (0) | 2021.12.21 |