node.js - Connect session 中间件签名 cookie 如何工作?

标签 node.js session cookies connect middleware

我想了解 connect.sid cookie 在 Connect Node.js 框架中的工作原理。我注意到它们的格式如下,

s:hash.signature

我不明白当哈希不仅能够用于从内存存储或 redis 存储访问 session 数据时如何使用签名。

此外,我不明白为什么 s: 甚至在 cookie 中;它的目的是什么。

我听说签名用于“签署”散列。 “签名”或“签名”到底是什么意思?我也需要有关此过程的解释。

谢谢!

最佳答案

签名在那里,因此服务器可以验证它生成了 cookie,而不是一些随机的攻击者。

只有知道用于签名的 secret 的人才能使用相同的值进行签名。

“s:”在那里,所以很容易知道它是一个签名的 cookie,而不是其他格式(如未签名)。

这是一种从已签名的 cookie 中检索数据的方法,如果签名不正确则失败。仅从实际应用程序中提取了部分代码,但您应该明白这一点。

var cookie = require('cookie');
var connect = require('connect');
var secret = "same secret used to sign cookies";

socketio.set('authorization', function(data, cb) {
  if (data.headers.cookie) {
    var sessionCookie = cookie.parse(data.headers.cookie);
    var sessionID = connect.utils.parseSignedCookie(sessionCookie['connect.sid'], secret);
    // do something here with decoded value
  }
});

您需要使用 socket.io 中的“授权”功能才能访问 header 。该代码在使用 xhr-polling 传输时有效,我不确定这是否适用于 websocket。

关于node.js - Connect session 中间件签名 cookie 如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14843960/

相关文章:

C++:Boost.Asio:在新线程中启动 SSL 服务器 session

javascript - HTTP GET 请求在正常 session 中工作但不在 'incognito' session 中

mysql - 如何获取多行json对象

node.js - Electron 通过中键单击防止多个实例

node.js - Azure Webjob System.IO.PathTooLongException

node.js - nodejs session 只存储 json?

javascript - 无法在 Express 4 中获取要通过请求发送的 cookie

jquery ui 选项卡不再支持 cookie?怎么办?

php - 如何使用 DOM 通过年龄验证

node.js - 具有内存压力感知的 NodeJS 内存缓存