一尘不染

connect / express.js中的“签名” cookie是什么?

node.js

我试图弄清楚什么是“签名cookie”。网上没有太多东西,如果我尝试这样做:

app.use(express.cookieParser('A secret'));

但仍然…
Cookies在浏览器上仍然100%正常,而且我真的不知道这里的“签名”是什么(我有点希望在客户端上“看到”一些奇怪的东西,例如使用作为盐的“秘密”?)

该文档说(https://github.com/expressjs/cookie-
parser):

解析 Cookie 标头,并填充req.cookies
以Cookie名称为键的对象。(可选)您可以通过传递一个secret字符串来启用签名cookie支持,该字符串会分配给req.secret它,以便其他中间件可以使用它。

有人知道吗

Merc。


阅读 244

收藏
2020-07-07

共1个答案

一尘不染

该cookie仍然可见,但是具有签名,因此它可以检测客户端是否修改了cookie。

它通过创建具有值(当前cookie)的HMAC并通过base64对其进行编码来工作。当读取cookie时,它将重新计算签名,并确保它与附加的签名匹配。

如果不匹配,则将给出错误。

如果您还想隐藏cookie的内容,则应该对其进行加密(或仅将其存储在服务器端会话中)。我不确定是否已经有中间件了。

编辑

并创建一个签名的cookie,您将使用

res.cookie('name', 'value', {signed: true})

要访问已签名的cookie,请使用的signedCookies对象req

req.signedCookies['name']
2020-07-07