Cookie签名后怎么验证才安全?
我在用 Express 写登录功能,后端用 cookie-parser 签了名的 Cookie,但前端每次读取的时候都拿不到原始值,只看到带 .sig 的一串。我试过直接用 document.cookie 读,结果是加密后的,根本没法用。
是不是前端根本不该读这种签名 Cookie?那如果我想在前端判断用户是否登录,该怎么处理?后端签了名的 Cookie 到底是用来干啥的?
我现在的代码大概是这样:
app.use(cookieParser('my-secret-key'));
app.get('/login', (req, res) => {
res.cookie('userId', '123', { signed: true });
});
但浏览器里看到的是 userId=123; userId.sig=somehash...,前端完全不知道怎么验证这个签名是否有效,也不敢直接信任 userId=123 这部分。
你理解错了,
userId=123就是原始值,明文的,谁都能看见。签名(.sig)的作用是让后端能检测这个123有没有被恶意改成456,前端既没必要也没能力验证。判断登录状态正确做法是写个接口让后端告诉你,比如:
前端调这个接口就行了,别瞎折腾在前端读 Cookie 验签名。