快递会秘密是静态的还是动态的?

A. *_*Lau 2 javascript session session-cookies node.js express

我无法从文档中找到任何关于秘密应该是静态字符串还是应该/可以是动态的信息.这就是我现在正在设置秘密的方式.

var salt1 = bcrypt.genSaltSync();
var salt2 = bcrypt.genSaltSync();
var secret = bcrypt.hashSync(salt1 + salt2, 10);
app.use(session({
    // activeDuration: toTime("days", 7),
    // duration: toTime("days", 7),
    maxAge: toTime("days", 7),
    saveUninitialized: false,
    secret, // set this to a long random string!,
}));
Run Code Online (Sandbox Code Playgroud)

那么秘密应该是一次性的事情还是动态的呢?

Thi*_*ter 5

通常,这些秘密用于对存储在客户端cookie中的会话数据进行签名和/或加密(在表达时,它用于对会话数据进行签名以防止篡改).

所以秘密必须是:

  • 秘密(呃!)
  • static(更改它将使用旧秘密使任何会话无效,除非你保留旧的秘密)
  • 可配置,就像数据库凭证等(你不想向你的代码库提交秘密)
  • 随机(任何给你一个长的随机/不可预测的字符串是好的)

仅供参考,使用bcrypt生成它是没有意义的.bcrypt的目标是缓慢防止暴力破坏哈希.这与此无关.适当的随机性就足够了.


文档中的相关部分:

这是用于签署会话ID cookie的秘密.这可以是单个秘密的字符串,也可以是多个秘密的数组.

如果提供了一个秘密数组,则只有第一个元素用于签署会话ID cookie,而在验证请求中的签名时将考虑所有元素.


由于快速会话支持保留旧机密,因此您可以旋转活动机密.例如,每月一次,您可以在阵列中添加一个新的随机密钥,从而允许具有旧秘密的现有会话继续工作,而不会将其用于任何新会话.然后,一旦达到最大年龄,您就可以安全地删除多天未使用的秘密.像这样,会话秘密的意外泄漏会在一段时间后变得无害(除非有人在此期间滥用它)