Как защитить прокси с помощью гвардейцев в 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);
}
Другие вопросы по тегам