我正在努力了解“秘密”的功能和相关性。快递中的选项。
我已尝试在线浏览有关此内容的一些信息,但无法找到任何重大信息。
这是我在npm express-session包页面上找到的: 秘密
必填选项
这是用于签署会话ID cookie的秘密。这可以是单个秘密的字符串,也可以是多个秘密的数组。如果提供了一个秘密数组,则只有第一个元素用于签署会话ID cookie,而在验证请求中的签名时将考虑所有元素。
我不明白秘密如何完成对会话ID cookie的签名。这个必要的功能究竟是如何在幕后实现的?
答案 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'
通过
设置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'}
希望这有帮助。
答案 1 :(得分:1)
secret
用于签署here