【问题标题】:Node.js. Encrypted vs Signed cookies节点.js。加密与签名 cookie
【发布时间】:2018-11-03 01:58:07
【问题描述】:

我想从我的 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 数据库中?

【问题讨论】:

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


    【解决方案1】:

    点之后的部分:

    imN4lT7OhW83Nc9Z7vw5dFbCoQhanP3aa37iyNWQyvU
    

    是会话id的签名:

    x05d6V5Dhf6efFGjIkO26Ka1
    

    也就是说,session id是用secret加密的,在session id后面加上一个点组成cookie。

    秘密不包含在 cookie 中。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-24
      • 1970-01-01
      • 2013-07-04
      • 1970-01-01
      • 2019-09-09
      • 1970-01-01
      • 2015-12-13
      相关资源
      最近更新 更多