2016-07-20 52 views
1

我们有一个Intranet应用程序,我们正在使用AngularJS前端和Web Api后端。它基本上是对现有的ASP.NET/WCF应用程序的重新设计,它只被我们的一些员工使用。带有web api的访问控制允许来源请求

我们打算使用Windows身份验证来强制执行此版本中的某些安全性(旧版本中没有),并且我们在使用Internet Explorer以外的浏览器时遇到了一些问题。例如,Chrome始终会出现401-未经授权的错误。我已经被指示跳过现在的安全功能(是的,我知道,不是一个好主意),所以我禁用了它们,但现在我看到一个错误,当我试图与API交谈(在一个单独的项目),但在Chrome中,而不是在IE中。

XMLHttpRequest无法加载http://localhost:62415/api/Emails。请求的资源上没有“Access-Control-Allow-Origin”标题。因此不允许访问原产地'http://localhost:50900'。响应的HTTP状态码为401.

我们在我们的API项目中启用了CORS,所以我不确定我需要在这里做什么。我们在本地开发中使用本地主机,但在质量保证中使用本地主机,并且这些网站将使用同一域中具有不同子域的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

别t使用ASP.net足以说,但你有什么应该这样做,一些其他的替代品在这里http://enable-cors.org/server_aspnet.html你应该看到一个请求与方法设置为OPTION在真正的GET/POST之前出现在对该请求的响应中时,标题应该指定允许访问控制起源设置为*或任何实际的客户域。 – shaunhusain

回答

1

不需要添加:

VAR CORS =新EnableCorsAttribute( “”, “”, “*”); config.EnableCors(cors);

出于安全原因,浏览器限制从脚本内发起的跨源HTTP请求。例如,XMLHttpRequest遵循同源策略。因此,使用XMLHttpRequest的Web应用程序只能向自己的域发出HTTP请求。 然而,您可以通过由:

  • 中的NuGet
  • 安装Microsoft.Owin.Cors包添加此方法在Startup.cs
public void Configuration(IAppBuilder app) 
     { 
      app.UseCors(CorsOptions.AllowAll); 
     } 
相关问题