asp.net-core
교차 출토 요청 (CORS)
수색…
비고
브라우저 보안은 웹 페이지가 AJAX 요청을 다른 도메인으로 만들지 못하게합니다. 이 제한은 동일 출처 정책이라고하며 악의적 인 사이트가 다른 사이트의 중요한 데이터를 읽지 못하게합니다. 그러나 때로는 다른 사이트에서 웹 응용 프로그램에 교차 출연 요청을하도록 할 수 있습니다.
Cross Origin Resource Sharing (CORS)은 서버가 동일한 출처 정책을 완화 할 수있게 해주는 W3C 표준입니다. CORS를 사용하면 서버가 일부 출처 요청을 거부하고 다른 요청은 거부 할 수 있습니다. CORS는 JSONP와 같은 이전 기술보다 안전하고 유연합니다.
모든 요청에 대해 CORS 사용
Configure
메서드의 IApplicationBuilder
에서 UseCors()
확장 메서드를 사용하여 모든 요청에 CORS 정책을 적용합니다.
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddCors();
}
public void Configure(IApplicationBuilder app)
{
// Other middleware..
app.UseCors(builder =>
{
builder.AllowAnyOrigin()
.AllowAnyHeader()
.AllowAnyMethod();
});
// Other middleware..
app.UseMvc();
}
특정 컨트롤러에 대해 CORS 정책 사용
특정 컨트롤러에 특정 CORS 정책을 사용하려면 ConfigureServices
메서드의 AddCors
확장에서 정책을 작성해야합니다.
services.AddCors(cors => cors.AddPolicy("AllowAll", policy =>
{
policy.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader();
}));
이렇게하면 컨트롤러에 정책을 적용 할 수 있습니다.
[EnableCors("AllowAll")]
public class HomeController : Controller
{
// ...
}
보다 정교한 CORS 정책
정책 작성 도구를 사용하면 정교한 정책을 작성할 수 있습니다.
app.UseCors(builder =>
{
builder.WithOrigins("http://localhost:5000", "http://myproductionapp.com")
.WithMethods("GET", "POST", "HEAD")
.WithHeaders("accept", "content-type", "origin")
.SetPreflightMaxAge(TimeSpan.FromDays(7));
});
이 정책은 GET
, POST
및 HEAD
메소드 만있는 출처 http://localhost:5000
및 http://myproductionapp.com
만 허용하고 accept
, content-type
및 origin
HTTP 헤더 만 허용합니다. SetPreflightMaxAge
메서드를 사용하면 브라우저가 프리 플라이트 요청 ( OPTIONS
)의 결과를 캐시하여 지정된 시간 동안 캐시합니다.
모든 컨트롤러에 대해 CORS 정책 사용
모든 MVC 컨트롤러에서 CORS 정책을 사용하려면 ConfigureServices 메서드의 AddCors 확장에 정책을 CorsAuthorizationFilterFactory
다음 CorsAuthorizationFilterFactory
정책을 설정해야합니다
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Cors.Internal;
...
public void ConfigureServices(IServiceCollection services) {
// Add AllowAll policy just like in single controller example.
services.AddCors(options => {
options.AddPolicy("AllowAll",
builder => {
builder.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader();
});
});
// Add framework services.
services.AddMvc();
services.Configure<MvcOptions>(options => {
options.Filters.Add(new CorsAuthorizationFilterFactory("AllowAll"));
});
}
public void Configure(IApplicationBuilder app) {
app.useMvc();
// For content not managed within MVC. You may want to set the Cors middleware
// to use the same policy.
app.UseCors("AllowAll");
}
이 CORS 정책은 컨트롤러 또는 작업 단위로 덮어 쓸 수 있지만 전체 응용 프로그램의 기본값을 설정할 수 있습니다.