Node.js的加密与签名的cookie

时间:2018-05-24 00:19:11

标签: node.js session encryption cookies passport.js

我想从我的cookie中检索值。

我正在使用passport.js,在这个任务中,我尝试了不同的东西。

  1. 我运行req.cookies;给了我这个:

    's:x05d6V5Dhf6efFGjIkO26Ka1.imN4lT7OhW83Nc9Z7vw5dFbCoQhanP3aa37iyNWQyvU' }
    

    这是签名cookie还是加密cookie?

    开头的's:'使其看起来像是签名的,但是当我运行req.signedCookies;时,我找回了一个空对象{}。这个cookie是签名还是加密的?

    然后我跑了:req.sessionID;回复了这个:

    x05d6V5Dhf6efFGjIkO26Ka1
    

    正如您所看到的,这也包含在我的cookie中,在点之前。所以我想sessionId存储在我的cookie中,对吗?

    然后我运行req.secret;,然后又返回undefined

  2. 是会话中的秘密,在此声明:

    app.use(express.session({ secret: 'blablablabla' }));
    

    用于签名cookie还是加密?

  3. cookie签名模块只能取消签名cookie而不解密它们 - 这是正确的吗? 它可以根据以前的会话密码取消签名吗?

  4. 最后,这个cookie存储在哪里?在我的mongo db?

1 个答案:

答案 0 :(得分:1)

点后的部分:

imN4lT7OhW83Nc9Z7vw5dFbCoQhanP3aa37iyNWQyvU

是会话ID的签名:

x05d6V5Dhf6efFGjIkO26Ka1

这就是说,会话ID用密钥加密,并用点附加到会话ID上以组成cookie。

cookie中不包含秘密。

如果您提供了正确的信息,则cookie签名模块可以取消对cookie的签名:

cookie-signature.ungisn(`${the_original_sessionid}.${the_encypted_sessionid}`,secret)