如何根据签名验证签名的Cookie?

时间:2019-06-10 13:23:53

标签: javascript node.js session websocket

我使用cookie-session,并且可以使用此解决方案https://github.com/expressjs/cookie-session/issues/117#issuecomment-452046225来解码标题中的cookie:

// session=eyJwYXNzcG9ydCI6eyJ1c2VyIjoiNWNiMzdiYzUzZTA2M2YxN2U2M2EzNDdkIn19; session.sig=wCuMz6lIsok00-Dqir3pnblJcAc
const parsedCookies = cookie.parse(req.headers.cookie)
const session = JSON.parse(Buffer.from(parsedCookies.session, 'base64').toString('utf8'))

如果正确,我希望允许客户端建立WebSocket连接。

我还有parsedCookies.sig内的签名。

会话值与此类似:

{ passport: { user: '5cb37bc53e063f17e63a347d' } }

我在服务器端看到此值,它是正确的。但是,我想知道用户是否未对此进行修改,所以我想对照session的值检查sig。如果修改了,我想关闭WebSocket连接。

我该怎么做?

1 个答案:

答案 0 :(得分:0)

我建议使用JWT令牌生成令牌。 JWT使用密钥对提供的用于生成令牌的参数进行编码,通常我们提供用户名,时间戳和用户ID。

执行以下步骤,

  1. 将生成的令牌存储在cookie中,也将其存储到数据库以在每次请求时进行验证。
  2. 在服务器端随每个请求发送此cookie,编写身份验证中间件,该中间件将通过使用用于生成令牌的密钥解密来验证此cookie。因此,您可以在那里检查令牌是否被修改。

有关更多详细信息,您可以访问JWT