我有一個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