node.js - Express-Session中 'secret'选项的核心功能是什么?

标签 node.js express web-development-server

我正在尝试了解快速 session 中“ secret ”选项的功能和相关性。

我已经尝试在线浏览一些与此相关的信息,但找不到任何实质性内容。

这是我在 npm express-session 包页面上找到的内容: secret

必选选项

这是用于签署 session ID cookie 的 secret 。这可以是单个 secret 的字符串,也可以是多个 secret 的数组。如果提供了一组 key ,则仅使用第一个元素对 session ID cookie 进行签名,而在验证请求中的签名时将考虑所有元素。

我不明白secret到底是如何完成对 session ID cookie进行签名的。这个必需的功能到底是如何在幕后实现的?

最佳答案

在幕后 express-session 正在使用另一个模块来签名 cookie-signature link here 。这是一个非常小的实现,您可以查找一下。

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

如果你看一下 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)
}

但是为什么呢?

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

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

注意:如果数据是对象,则JSON.stringify(object)

这样用户就可以通过您的服务器安全地访问他们的AC资源。您的开发流程变得更加容易。

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

希望这有帮助。

关于node.js - Express-Session中 'secret'选项的核心功能是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45390058/

相关文章:

javascript - Express JavaScript Supertest 期望特定的 json 字段

javascript - 不理解使用函数和参数解析查询字符串

python - 将文件从 s3 Bucket 下载到 USERS 计算机

node.js - 如何限制在 find() 期间数据库中不存在的 Mongoose 默认值

javascript - 第一个 next() 调用的参数去哪里了?

node.js - CALL_NON_FUNCTION_AS_CONSTRUCTOR( native )

node.js - Nodejs - 检查 MongoDB 中的空对象并解析它

java - 玩!框架路线。长数据类型

node.js - Node.js 中的事件和事件发射器

node.js - react-scripts 需要旧版本的 webpack