2016-07-20 1 views
1

우리는 AngularJS 프런트 엔드와 웹 API 백엔드로 작업중인 인트라넷 응용 프로그램을 보유하고 있습니다. 기본적으로 기존 ASP.NET/WCF 응용 프로그램의 재 설계이며 일부 직원 만 사용합니다.웹 액세스와 함께 Access-Control-Allow-Origin 요청

우리는 Windows 인증을 사용하여이 버전에서 보안을 강화하려고했지만 이전 버전에서는 Internet Explorer 이외의 브라우저에서 작동하도록하는 데 문제가있었습니다. 예를 들어 Chrome에서는 항상 401-Unauthorized 오류가 발생합니다.

지금은 보안 기능을 건너 뛰라는 지시를 받았으므로 (사용하지 않았으므로 좋지 않음) 사용을 중지했지만 이제는 API에 대한 이야기를하려고 할 때 오류가 표시됩니다 (별도의 프로젝트).하지만 Chrome에서는 작동하지만 IE에서는 작동하지 않습니다.

XMLHttpRequest는 http://localhost:62415/api/Emails을로드 할 수 없습니다. 'Access-Control-Allow-Origin'헤더가 요청 된 리소스에 없습니다. 따라서 원점 'http://localhost:50900'은 액세스 할 수 없습니다. 응답에 HTTP 상태 코드 401이 있습니다.

API 프로젝트에서 CORS를 사용하도록 설정 했으므로 여기에서해야 할 일이 확실하지 않습니다. 로컬 개발에서는 localhost를 사용하지만 QA 및 프로덕션에서는 동일한 도메인 내에서 다른 하위 도메인의 URL을 사용합니다.

나는 내 프로젝트의 시작 클래스를 사용하고 있으며이 방법을 가지고 : 내가 모르는 뭔가가 있어야합니다

public void Configuration(IAppBuilder app) 
    { 
     var config = new HttpConfiguration(); 

     WebApiConfig.Register(config); 
     app.UseCors(CorsOptions.AllowAll); 
     app.UseWebApi(config); 
    } 

. 원래 WebApiConfig에이 코드가 있었지만 복원해도 아무 것도 고쳐주지 않았습니다.

var cors = new EnableCorsAttribute("*", "*", "*"); 

cors.SupportsCredentials = true; 
config.EnableCors(cors); 

도움이 되었습니까?

+0

돈 ' ASP.net에서 충분히 말할 수 있지만, 여기에 몇 가지 다른 대안이 있어야한다. http://enable-cors.org/server_aspnet.html 해당 요청에 대한 응답으로 실제 GET/POST 전에 나가는 OPTION은 헤더가 액세스 제어 허용 원본이 * 또는 실제 클라이언트 도메인이 무엇이든 설정해야 함을 지정해야합니다. – shaunhusain

답변

1

추가 할 필요가 없습니다 :

var에 고르를 = 새로운 EnableCorsAttribute을 ("", "", "*"); config.EnableCors (cors);

보안상의 이유로 브라우저는 스크립트 내에서 시작된 크로스 원본 HTTP 요청을 제한합니다. 예를 들어, XMLHttpRequest는 같은 출처 정책을 따릅니다. 따라서 XMLHttpRequest를 사용하는 웹 응용 프로그램은 자체 도메인에 대해서만 HTTP 요청을 만들 수 있습니다. 그러나, 당신은에 의해 것을 전달할 수 있습니다 Startup.cs에 추가

  • nuget
  • 에 Microsoft.Owin.Cors 패키지를 설치하려면이 방법을
public void Configuration(IAppBuilder app) 
     { 
      app.UseCors(CorsOptions.AllowAll); 
     }