2016-07-26 22 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

回答