快速会议中“秘密”选项的核心function是什么?

我正在尝试了解快速会话中“秘密”选项的function和相关性。

我已经尝试在网上浏览一些关于这方面的信息,但没有find任何实质性的东西。

这就是我在npm express-session软件包页面上发现的秘密

必需的选项

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

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

在幕后的express-session是使用另一个模块来做唱歌cookie-signature 链接在这里 。 这是一个非常小的实现,你可以查看。

本质上你正在创build一个被设置为cookie值的散列。 这个散列本身就是我们设置到cookie中的数据的表示。

如果你看看express-session实施。 Express会话使用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值安全地存储为散列。

例如:会话(用户)在您的服务器上进行身份validation之前,他们有外部Microsoft ActiveDirectory上的资源。 在login时,将AC用户名和密码(可能与您自己的服务器用户名和密码不同)设置为cookie并进行散列处理。

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

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

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

希望这可以帮助。

secret是用来在这里签字的