快速会话中“秘密”选项的核心功能是啥?

Posted

技术标签:

【中文标题】快速会话中“秘密”选项的核心功能是啥?【英文标题】:What is the core functionality of the 'secret' option in express-session?快速会话中“秘密”选项的核心功能是什么? 【发布时间】:2018-01-05 12:01:44 【问题描述】:

我正在尝试了解 express-session 中“秘密”选项的功能和相关性。

我已经尝试在网上浏览有关这方面的一些信息,但找不到任何实质性的信息。

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

必选选项

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

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

【问题讨论】:

【参考方案1】:

幕后express-session正在使用另一个模块来唱歌cookie-signaturelink 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'

希望这会有所帮助。

【讨论】:

为了进一步详细说明您的答案,我发现这个link 很有帮助。【参考方案2】:

secret 用于签名here

【讨论】:

以上是关于快速会话中“秘密”选项的核心功能是啥?的主要内容,如果未能解决你的问题,请参考以下文章

Page Info是啥意思,谢谢!

登陆功能的记住我选项(Cookie和Session)

perldoc perlxxx 选项是啥?

华为荣耀8开发者选项是啥意思

Visual Studio Code 中是不是有快速更改选项卡功能?

HTTP 会话的范围是啥?