Nestjs websocket网关,如何从握手中解析签名cookie以进行保护授权?
Posted
技术标签:
【中文标题】Nestjs websocket网关,如何从握手中解析签名cookie以进行保护授权?【英文标题】:Nestjs websocket gateway, how to parse signed cookies from handshake for guard authorization? 【发布时间】:2020-04-13 18:27:57 【问题描述】:我的守卫包含以下代码:
let client: Socket = context.switchToWs().getClient();
const sessionCookie = client.handshake.headers.cookie
.split('; ')
.find((cookie: string) => cookie.startsWith('session'))
.split('=')[1];
const sessionId = cookieParser.signedCookie(
sessionCookie,
process.env.CryptoKey,
);
console.log('SESSION ID',sessionId);
调用 cookieParse.signedCookie(); 后生成的 sessionId 仍然是签名的;
client.request.cookies 和 signedCookies 都是未定义的。
会话 id 在那里,cookie 正在由浏览器发送,但我无法在网关中解析它。
【问题讨论】:
【参考方案1】:我遇到了同样的问题并找到了答案。您的代码很接近,但cookieParser.signedCookie(...)
再次返回签名 cookie 的原因是因为 cookie 值中的某些字符被编码。所以它不会将字符串检测为签名的 cookie。
要解决此问题,您必须改为将 decodeURIComponent(sessionCookie)
传递给 cookieParser。
let client: Socket = context.switchToWs().getClient();
const sessionCookie = client.handshake.headers.cookie
.split('; ')
.find((cookie: string) => cookie.startsWith('session'))
.split('=')[1];
const sessionId = cookieParser.signedCookie(
decodeURIComponent(sessionCookie),
process.env.CryptoKey,
);
console.log('SESSION ID',sessionId);
【讨论】:
以上是关于Nestjs websocket网关,如何从握手中解析签名cookie以进行保护授权?的主要内容,如果未能解决你的问题,请参考以下文章