본문 바로가기
Knowledge/node.js

[node-1] 쿠키 생성과 보안

by w.developer 2023. 7. 13.

쿠키는 클라이언트와 서버 간에 토큰을 저장하는 데 사용되며, 특히 인증에 중요한 역할을 합니다.

오늘 겪었던 쿠키 생성에 관한 오류와 그 활용법에 대해서 이야기하려고 합니다.

 

1. Bearer 토큰의 쿠키 포함 여부

 

Bearer Token은 HTTP 인증 스키마 중 하나로, 주로 JWT(JSON Web Tokens)와 함께 사용됩니다. Bearer 토큰은 Authorization 헤더를 통해 전달되며, 일반적으로 Bearer <token>의 형태를 가집니다.

이 때, "Bearer"와 실제 토큰 사이에 공백이 필요한데, 이는 Bearer 스키마가 토큰을 올바르게 인식하고 처리할 수 있게 하기 위한 규칙입니다. Bearer<token>과 같이 공백 없이 사용하면, 토큰을 제대로 인식하지 못해 인증이 실패하게 됩니다.

// 잘못된 예시: Bearer와 토큰 사이에 공백이 없음
res.cookie('Authorization', `Bearer${token}`);

// 올바른 예시: Bearer와 토큰 사이에 공백이 있음
res.cookie('Authorization', `Bearer ${token}`);

 

2. Cookie Parser 미들웨어 사용하기


Express.js에서 쿠키를 처리하기 위해 cookie-parser 미들웨어를 사용합니다. 이 미들웨어는 요청의 Cookie 헤더를 파싱하고, req.cookies 객체를 생성합니다. 이를 통해 쿠키에 저장된 토큰을 쉽게 불러올 수 있습니다.

오늘 문제를 해결하는 과정에서 cookie-parser의 중요성을 깨달았는데, cookie-parser가 없다면, 쿠키를 파싱하고 처리하는 복잡한 과정을 직접 구현해야 했습니다.

const cookieParser = require('cookie-parser');
app.use(cookieParser());


3. HTTP Only 와 Secure 쿠키

 

웹 애플리케이션의 보안을 위해 중요한 두 가지 쿠키 옵션은 HttpOnly와 Secure가 있습니다.

HttpOnly 옵션은 JavaScript를 통한 쿠키 접근을 방지하므로, XSS(Cross-Site Scripting) 공격을 방지하는 데 도움이 되고, Secure 옵션은 HTTPS를 통해서만 쿠키를 전송하도록 제한합니다. 이는 쿠키가 암호화된 연결을 통해서만 전송되어야 함을 보장하므로, 쿠키를 통한 중요 정보의 노출 위험을 줄일 수 있다고 합니다.

res.cookie('Authorization', `Bearer ${token}`, {
  httpOnly: true, // JavaScript를 통한 접근 방지
  secure: true, // HTTPS 연결에서만 전송
});

 

오늘 쿠키 공백 처리 부분 때문에 어이없이 많은 시간을 소비했습니다.

그래도 덕분에 많은 것을 배울 수 있었습니다. 앞으로도 웹 애플리케이션의 인증과 보안에 대해 더 깊이 공부해서, 보안에 신경 쓰는 개발을 해야겠습니다.

 

'Knowledge > node.js' 카테고리의 다른 글

[node-2] Sequelize CLI 명령어  (0) 2023.07.13