AngularJS/WebApi应用程序中使用Windows身份验证的CORS问题-仅适用于IE
本文关键字:问题 CORS IE 适用于 身份验证 Windows WebApi 应用程序 AngularJS | 更新日期: 2023-09-27 17:58:37
我有一个带有AngularJS前端和ASP的intranet应用程序。NET Web API后端,它们是在同一服务器上的IIS上运行的独立Web应用程序。Web API与UI项目不在同一个项目中的原因是它将与其他intranet应用程序共享。
我需要提供一些安全功能。我需要知道每个用户是谁,并根据该用户是谁以及该用户所属的角色(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项目中添加了一个Startup类:
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中确实有这段代码,但显然不需要它,因为我使用的是Startup类,它是否存在也没有什么区别:
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浏览器一起工作?
我知道其他的安全问题会很复杂,但我需要先克服这个障碍。
3个可能对您有所帮助的链接-https://msdn.microsoft.com/en-us/magazine/dn532203.aspx
http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api
http://www.asp.net/mvc/overview/releases/how-to-upgrade-an-aspnet-mvc-4-and-web-api-project-to-aspnet-mvc-5-and-web-api-2