허용된 브라우저 origin만 API 응답을 읽게 설정합니다.
CORS는 브라우저의 cross-origin 응답 읽기 정책이며 인증을 대체하지 않습니다. 정확한 origin 허용 목록과 credentials 요구를 설정합니다.
credentials true와 wildcard origin을 함께 사용하지 않습니다.
서버 간 요청은 CORS 영향을 받지 않으므로 모든 API에 인증·인가가 필요합니다.
CORS를 공격 방지 인증 기능으로 오해하지 마세요.
로컬 프로젝트에서 확인해보세요development origin과 production origin을 환경 설정으로 분리하세요.
import "reflect-metadata";
import { Controller, Get, Module } from "@nestjs/common";
import { NestFactory } from "@nestjs/core";
@Controller()
class AppController {
@Get() home() {
return { cors: "allowlist", authentication: "still required" };
}
}
@Module({ controllers: [AppController] })
class AppModule {}
async function bootstrap() {
const app = await NestFactory.create(AppModule);
const allowed = new Set(["http://localhost:3000", "https://hohyeon.dev"]);
app.enableCors({
origin(origin, callback) {
callback(null, !origin || allowed.has(origin));
},
credentials: true,
});
await app.listen(4173, "0.0.0.0");
}
bootstrap();