inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

Node.js 교과서 - 기본부터 프로젝트 실습까지

스스로 해보기2(시스템 메시지 디비 저장)

cookie.sign 관련 질문 하나 드리겠습니다.

304

­멧돌짱

작성한 질문수 4

0

안녕하세요!!

강의 잘 듣구있습니다!!

Cookie: `connect.sid=${'s%3A' + cookie.sign(req.signedCookies['connect.sid'], process.env.COOKIE_SECRET)}`

헤더에 위와 같은 쿠키를 넣어 보내는 이유가 결국은

"같은 사람이 보냈다는 것을 서버에게 알려주기 위함" 이라고 말씀해주셨는데, 제가 궁금한 것은 

그렇다면 결국 최초 localhost:8005 에 접속했을 때, 서버가 보내는 set-cookie 의 값(=express 가 만든 세션 쿠키)과
's%3A' + cookie.sign()  이거로 인해 생긴 쿠키의 문자열?이 결과적으론 같다는 것으로 이해했습니다. 실제로 console 로 찍어보니 같게 나오기도 해서 일단 받아들였습니다.

제가 궁금한 것은
1. 이 2가지 쿠키가 어떻게 암호화가 과정을 거쳐서 
같은 의미를 나타내는 쿠키가 되는지 궁금합니다.

결국 req.sign() 이란 메서드가 서명된 쿠키를 같은 key로 암호화하기 때문에 같아지는 것인지...

2. req.signedCookies['connect.sid'] 는 말 그대로 서명된 쿠키인데, 이 서명된 쿠키를 굳이 왜 또 같은 secret-key 로 암호화하게 되는 것인지 ㅠㅠ...

express가 만든 세션 쿠키(req.signedCookies['connect.sid']) --> 클라이언트 ( 한 번 더 암호화?? 엄청 긴 이상한 string) --> 다시 express로 들어올 떄(req.signedCookies['connect.sid']) --> axios 로 보낼 때( sign() 메서드로 아까 클라이언트 보낼 때랑 같은 한 번더 암호화? 된 긴 string) 

위와 같은 흐름이 맞는지 궁금합니다.

저 스스로가 잘 이해를 못하고 있어서 질문이 좀 난해한 것 같아서 죄송합니다!! 

감사합니다.

콘솔로그 결과는 아래 첨부 해놓겠습니다!!

최초 connection 때의 header :  {"host":"localhost:8005","connection":"keep-alive","accept":"*/*","user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36","sec-fetch-site":"same-origin","sec-fetch-mode":"cors","referer":"http://localhost:8005/room/5dcbfa3fff28e31ffcb4d4bf?password=","accept-encoding":"gzip, deflate, br","accept-language":"ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7","cookie":"connect.sid=s%3APILsEVhtt485hYWal47Hi5LzVmU9xzMy.uKLfTbFcdOJLpo3id8g9Biw1Dg2EH9F7yWQtJqyOS7k; io=o0yIKhR3KcO_wrVBAAAC"}

req.signedCookies['connect.sid'] :  PILsEVhtt485hYWal47Hi5LzVmU9xzMy

cookie.sign(req.signedCookies['connect.sid'], process.env.COOKIE_SECRET) :  PILsEVhtt485hYWal47Hi5LzVmU9xzMy.uKLfTbFcdOJLpo3id8g9Biw1Dg2EH9F7yWQtJqyOS7k

axios로 /room/:id/sys 요청할 때 헤더 :  {"accept":"application/json, text/plain, */*","content-type":"application/json;charset=utf-8","cookie":"connect.sid=s%3APILsEVhtt485hYWal47Hi5LzVmU9xzMy.uKLfTbFcdOJLpo3id8g9Biw1Dg2EH9F7yWQtJqyOS7k","user-agent":"axios/0.19.0","content-length":"15","host":"localhost:8005","connection":"close"}

mongodb nodejs javascript mysql

답변 3

1

제로초(조현영)

PILsEVhtt485hYWal47Hi5LzVmU9xzMy.uKLfTbFcdOJLpo3id8g9Biw1Dg2EH9F7yWQtJqyOS7k

1. 콘솔을 보시면 아시겠지만 cookie.sign을 했을 때 굵게 칠해진 부분이 추가됩니다. 이 부분이 signature로 이 서버가 암호화한 것임을 알려주는 역할을 합니다.

2. 보시면 뒤에 signature 부분이 없기 때문에 다시 붙여주는 것입니다.

0

제로초(조현영)

process.env.COOKIE_SECRET이 같아서입니다.

0

­멧돌짱

답변 감사드립니다.

그러면 굵게 칠해진 부분이 같을 수 있는 이유는  현재 제 같은 로컬서버에서 돌아가기 때문에 똑같은 sinature 가 더해진다고 생각하면 될까요??

실제 서비스에서도 cluster를 사용하나요?

1

313

2

캐싱에 관하여

0

279

3

salt를 실무에서 사용할때 항상 randomBytes로 만들어줘야 하나요?

0

347

1

게시물 올리기 오류

0

408

1

캐슁 이후 로그인창

0

266

1

kakao passport 질문있습니다.

0

493

3

global객체 공유 질문드립니다.

1

418

1

서버가 죽어버리네요

0

1047

8

포링키 문제..

0

235

2

커넥션 플래시 설치문제

0

216

2

익스프레스 제너레이터? 설치문제

0

2586

6

redis 질문입니다.

0

305

1

9장 세션을 DB에 저장시 리다이렉션 오류 발생

0

874

8

프레임워크 선택에 관하여 질문이 있습니다.

0

300

3

시퀄라이즈 질문입니다 ! !

0

588

1

리뉴얼 강의 12강 socket.io에서 req.session접근 관련 질문

0

922

6

oAuth 질문입니다.

0

356

3

GCP 질문입니다.

0

366

1

Passport 모듈 로그인 구현관련

0

720

6

카카오 로그인 관련 질문입니다!!

0

606

4

스스로 해보기 10-16 nunjuncks 질문있습니다

0

499

5

제로초님 HTTP 완벽가이드 추천해주신거 너무 잘 읽었습니다.

0

317

2

gif채팅방 nunjucks관련 질문입니다!

0

338

3

현영님 몽고db관련 질문입니다.

0

233

3