我有一个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工作?
我知道的东西安全,其余将是复杂的,但我需要首先克服这一障碍。
我把我的网站QA,发现Chrome浏览器的存在。我认为这与运行localhost进行开发有关。在QA中,这些网站作为同一个域的子域运行,并且CORS内容在那里不需要。也许我需要在我的hosts文件中输入一些条目来处理这个... – DesertFoxAZ