2016-07-26 52 views
1

我有一个AngularJS前端的Intranet应用程序和一个ASP.NET Web API后端,他们是在同一台服务器上运行在IIS上独立的Web应用程序。 Web API与UI项目不在同一项目中的原因是因为它将与其他Intranet应用程序共享。CORS问题 - 只适用于IE

我需要提供一些安全功能。我需要知道每个用户是谁,并根据用户是谁以及用户属于哪个角色(Windows组)来限制可以完成的操作。我已经启用Windows身份验证的应用程序和我已经通过将以下两部分中的web.config中做到了这一点:

<authentication mode="Windows" /> 
    <authorization> 
     <deny users="?" /> 
    </authorization> 

,因为我发现我还没有授权做任何事情虽然我可以使用Chrome浏览器或Internet Explorer浏览网站,但除非使用IE浏览器,否则我无法访问Web API项目。在Chrome中,我跑了开发工具,我看到:

无法加载资源:服务器用401(未授权)

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

我已经启用在我的代码CORS但它似乎并没有使用Chrome时有所作为。但是,我可以访问API URL并获取数据。

我做了一些研究,我在我的Web API项目添加启动类这样:

using Microsoft.Owin; 
using Microsoft.Owin.Cors; 
using Owin; 
using System.Web.Http; 

[assembly: OwinStartup(typeof(WebApi.Startup))] 
namespace WebApi 
{ 
    public class Startup 
    { 
     public void Configuration(IAppBuilder app) 
     { 
      var config = new HttpConfiguration(); 

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

我没有在我的Global.asax.cs中有这样的代码,但显然它不是”牛逼必要的,因为我使用的启动类,它不会有所作为无论是存在还是不:

protected void Application_BeginRequest(object sender, EventArgs e) 
    { 
     if ((Context.Request.Path.Contains("api/") || Context.Request.Path.Contains("odata/")) && Context.Request.HttpMethod == "OPTIONS") 
     { 
      Context.Response.AddHeader("Access-Control-Allow-Origin", Context.Request.Headers["Origin"]); 
      Context.Response.AddHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); 
      Context.Response.AddHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS"); 
      Context.Response.AddHeader("Access-Control-Allow-Credentials", "true"); 
     } 
    } 

什么我需要怎样做才能让这个与其他浏览器IE工作?

我知道的东西安全,其余将是复杂的,但我需要首先克服这一障碍。

+0

我把我的网站QA,发现Chrome浏览器的存在。我认为这与运行localhost进行开发有关。在QA中,这些网站作为同一个域的子域运行,并且CORS内容在那里不需要。也许我需要在我的hosts文件中输入一些条目来处理这个... – DesertFoxAZ

回答

相关问题