You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在NestJS中使用Passport策略保护Swagger UI端点?

使用Passport策略保护NestJS的Swagger端点

完全可以用你已配置的Passport BasicStrategy来保护Swagger端点,具体步骤如下:

1. 确认Passport模块与策略已注册

确保根模块(如AppModule)中已导入PassportModule并注册你的HttpStrategy:

import { Module } from '@nestjs/common';
import { PassportModule } from '@nestjs/passport';
import { HttpStrategy } from './http.strategy';

@Module({
  imports: [PassportModule],
  providers: [HttpStrategy],
})
export class AppModule {}

2. 为Swagger路由应用Auth守卫

NestJS的SwaggerModule.setup支持通过中间件配置为Swagger的UI页面和文档接口添加守卫,直接修改main.ts的代码即可:

import { AuthGuard } from '@nestjs/passport';
import { SwaggerModule, DocumentBuilder } from '@nestjs/swagger';

// ...其他初始化代码

const config = new DocumentBuilder()
  .setTitle("User API")
  .setDescription("The User API description")
  .setVersion("1.0")
  .addTag("user")
  .build();
const document = SwaggerModule.createDocument(app, config);

// 配置Swagger并添加守卫保护
SwaggerModule.setup('swagger', app, document, {
  setupMiddleware: (app) => {
    // *关键*:用Basic Auth守卫保护所有Swagger相关路由
    app.use('/swagger*', AuthGuard('basic').canActivate);
  },
  // 可选:让Swagger UI支持Basic Auth输入框
  swaggerOptions: {
    authAction: {
      BasicAuth: {
        schema: { type: 'http', scheme: 'basic' },
      },
    },
  },
});

也可以用更直接的方式在SwaggerModule.setup前单独为路由绑定守卫:

// 保护Swagger UI和文档JSON接口
app.use('/swagger', AuthGuard('basic').canActivate);
app.use('/swagger-json', AuthGuard('basic').canActivate);

SwaggerModule.setup('swagger', app, document);

3. 验证效果

启动应用后访问/swagger,浏览器会弹出Basic Auth登录框,只有输入正确的admin/admin凭证才能进入Swagger UI,同时/swagger-json接口也会被拦截保护。

扩展说明

如果后续要改用其他Passport策略(如JWT),只需将AuthGuard('basic')替换为对应策略名称(如AuthGuard('jwt')),同时确保对应策略已正确配置即可,无需大幅修改Swagger的保护逻辑。

内容的提问来源于stack exchange,提问作者Pollux28

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 01:01:10