express-session 中 'secret' 选项的核心功能是什么?
What is the core functionality of the 'secret' option in express-session?
我正在尝试了解 express-session 中 'secret' 选项的功能和相关性。
我已经尝试在网上浏览一些有关这方面的信息,但找不到任何实质性的信息。
这是我在 npm express-session 包页面上找到的:
秘密
必需选项
这是用于签署会话 ID cookie 的秘密。这可以是单个秘密的字符串,也可以是多个秘密的数组。如果提供了一组秘密,则只有第一个元素将用于签署会话 ID cookie,而在验证请求中的签名时将考虑所有元素。
我不明白 secret 究竟是如何完成对会话 ID cookie 的签名的。这个必需的功能在幕后究竟是如何实现的?
secret
用于签名here
在幕后 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 并进行哈希处理。
注意:如果数据是 object
,JSON.stringify(object)
这样用户就可以安全地通过您的服务器访问他们的AC资源。而且您的开发流程变得更加简单。
req.session // {AcUsername: 'myAccUser', AcPass: 'myAccPass'}
希望这对您有所帮助。
我正在尝试了解 express-session 中 'secret' 选项的功能和相关性。
我已经尝试在网上浏览一些有关这方面的信息,但找不到任何实质性的信息。
这是我在 npm express-session 包页面上找到的: 秘密
必需选项
这是用于签署会话 ID cookie 的秘密。这可以是单个秘密的字符串,也可以是多个秘密的数组。如果提供了一组秘密,则只有第一个元素将用于签署会话 ID cookie,而在验证请求中的签名时将考虑所有元素。
我不明白 secret 究竟是如何完成对会话 ID cookie 的签名的。这个必需的功能在幕后究竟是如何实现的?
secret
用于签名here
在幕后 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'
并通过
设置cookiefunction 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 并进行哈希处理。
注意:如果数据是 object
,JSON.stringify(object)
这样用户就可以安全地通过您的服务器访问他们的AC资源。而且您的开发流程变得更加简单。
req.session // {AcUsername: 'myAccUser', AcPass: 'myAccPass'}
希望这对您有所帮助。