这个秘密'的核心功能是什么?快递中的选项?

时间:2017-07-29 13:55:17

标签: node.js express web-development-server

我正在努力了解“秘密”的功能和相关性。快递中的选项。

我已尝试在线浏览有关此内容的一些信息,但无法找到任何重大信息。

这是我在npm express-session包页面上找到的: 秘密

必填选项

这是用于签署会话ID cookie的秘密。这可以是单个秘密的字符串,也可以是多个秘密的数组。如果提供了一个秘密数组,则只有第一个元素用于签署会话ID cookie,而在验证请求中的签名时将考虑所有元素。

我不明白秘密如何完成对会话ID cookie的签名。这个必要的功能究竟是如何在幕后实现的?

2 个答案:

答案 0 :(得分:2)

幕后express-session正在使用另一个模块进行歌唱cookie-signature link here。这是一个非常小的实现,你可以查找。

基本上,您正在创建一个设置为cookie值的哈希。该哈希本身就是我们在cookie中设置的数据的表示。

如果您查看express-session实施情况。 Express-session使用cookie名称

// get the session cookie name
  var name = opts.name || opts.key || 'connect.sid'

通过

设置cookie
function setcookie(res, name, val, secret, options) {
  var signed = 's:' + signature.sign(val, secret);
  var data = cookie.serialize(name, signed, options);

  debug('set-cookie %s', data);

  var prev = res.getHeader('set-cookie') || [];
  var header = Array.isArray(prev) ? prev.concat(data) : [prev, data];

  res.setHeader('set-cookie', header)
}

但是为什么?

会话可以包含敏感数据,因此cookie值安全地存储为哈希值。

例如: 除了在您的服务器上进行身份验证之外的会话(用户),它们还具有外部Microsoft ActiveDirectory上的资源。登录时,将AC用户名和密码(可能与您自己的服务器用户名和密码不同)设置为cookie并进行哈希处理。

通知:如果数据是objectJSON.stringify(object)

通过这种方式,用户可以通过您的服务器以安全的方式访问其AC资源。而且您的开发流程变得更加容易。

req.session // {AcUsername: 'myAccUser', AcPass: 'myAccPass'}

希望这有帮助。

答案 1 :(得分:1)

secret用于签署here