Как защитить прокси с помощью гвардейцев в NestJS
Используя https://github.com/chimurai/http-proxy-middleware (которое использует http-proxy), я смог создать прокси для внутреннего (скрытого извне) URL-адреса и получить ожидаемый ответ.
Однако, поскольку это подход промежуточного программного обеспечения, я не могу применить какие-либо существующие охранники (например, JWT, Role и т. Д.) К этому прокси.
В документации NetJS Guards упоминается, что Guard запускается после каждого промежуточного программного обеспечения.
Могу ли я защитить этот прокси-маршрут с помощью существующих охранников без повторной реализации всех охранников в качестве промежуточного программного обеспечения?
Заранее спасибо.
2 ответа
это работает для замены логики Guard (файл cookie с JWT)
приложение.использовать( createProxyMiddleware('/proxy', { цель: API_SERVICE_URL, changeOrigin: правда, путьПереписать: { '^/proxy': '/', // удалить базовый путь }, onProxyReq: (proxyReq, req: Request, res: Response, options) => { const {cookie} = req.headers; если (!cookie) { res.status(403).json({сообщение: 'Токен не предоставлен' }); возвращаться; } константный токен = cookie.replace('Authentication=', ''); если (! токен) { res.status(403).json({сообщение: 'Токен не предоставлен' }); возвращаться; } еще { jwt.verify(токен, process.env.JWT_SECRET, (ошибка, декодировано) => { если (ошибка) { res.status(403).json({сообщение: 'Неверный токен'}); возвращаться; } }); } }, }), кукипарсер(), );
Как вы сказали, невозможно использовать Nest guard, это промежуточное ПО. Единственное, что вы можете сделать для защиты прокси-маршрута, - это добавить промежуточное ПО для прокси-маршрута до его установки. Если вы настраиваете промежуточное ПО прокси вmain.ts
это будет выглядеть примерно так
async function bootstrap() {
const app = await NestFactory.create(AppModule);
app.use('proxy-route', (req, res, next) => {
if (passCondition) {
return next();
}
return next(new UnauthorizedException());
}
app.use(proxyMiddleware);
await app.listen(port);
}