Nest.js Swagger 보안 설정

`Swagger`는 `local` 환경이나 개발 단계에서 사용을 하게 되는 문서입니다. 이러한 문서를 아무나 접근을 하여 사용하려고 하면 보안에 취약해질 수 있으니 이를 방지 할 수 있도록 `Swagger`에 보안을 설정 해주도록 하겠습니다.

 

모듈 설치

npm i express-basic-auth
npm i dotenv

 

.env 파일 설정

`/src/.env` 파일 생성 해줍니다.

NODE_ENV=dev

SWAGGER_USER=admin
SWAGGER_PASSWORD=admin

 

App Module 설정

`imports`에 `configModule`을 추가 해줍니다.

    ConfigModule.forRoot({
      isGlobal: true,
      envFilePath: '.env',
    }),

 

main.ts 설정

`runtime` 환경이 `local` 이거나 `dev` 일때만 `swagger` 가 적용될 수 있도록 해줍니다. 

 const SWAGGER_ENVS = ['local', 'dev'];
  const stage = process.env.NODE_ENV;

  if (SWAGGER_ENVS.includes(stage)) {
    console.log(process.env.SWAGGER_USER, process.env.SWAGGER_PASSWORD);

    app.use(
      ['/docs', '/docs-json'],
      expressBasicAuth({
        challenge: true,
        users: {
          [process.env.SWAGGER_USER]: process.env.SWAGGER_PASSWORD,
        },
      }),
    );
    const config = new DocumentBuilder()
      .setTitle('NestJS project')
      .setDescription('NestJS project API description')
      .setVersion('0.1')
      .addBearerAuth()
      .build();
    const customOptions: SwaggerCustomOptions = {
      swaggerOptions: {
        persistAuthorization: true,
      },
    };
    const document = SwaggerModule.createDocument(app, config);
    SwaggerModule.setup('docs', app, document, customOptions);
  }

 

결과 확인

이제는 이렇게 `swagger`에 접근 하려고 하면 로그인을 해야 하도록 변경 되었습니다.  

'Backend > Nest.js' 카테고리의 다른 글

Nest.js mongodb-memory-server, cache 적용  (1) 2023.10.05
Nest.js Rate Limiting 설정  (0) 2023.09.30
Nest.js bcrypt (hashing)  (0) 2023.09.27
Nest.js Module  (0) 2023.09.26
Nest.js Provider  (0) 2023.09.26