`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 |