2017-06-29 57 views
1

我有一個.net核心api,我想只接受來自一個域的調用。那裏有一個Angular 4應用程序。.Net核心API CORS,鎖定到只有一個域(Angular應用程序)

我創造這樣的CORS政策...

services.AddCors(options => 
     { 
      options.AddPolicy("AllowSpecificOrigin", 
       builder => builder.WithOrigins("http://www.test.com").AllowAnyHeader()); 
     }); 

和我加載它像這樣...

app.UseCors("AllowSpecificOrigin"); 

我本來預計只能從對角的應用程序調用域可以打api,但是如果我在Chrome Postman中創建一個電話,我仍然可以直接點擊api。

我在做什麼錯?我想鎖定除Angular應用外的所有流量。

這裏有我startup.cs的詳細信息...

public Startup(IHostingEnvironment env) 
    { 
     var builder = new ConfigurationBuilder() 
      .SetBasePath(env.ContentRootPath) 
      .AddJsonFile("appsettings.json", true, true) 
      .AddJsonFile($"appsettings.{env.EnvironmentName}.json", true) 
      .AddEnvironmentVariables(); 


     Configuration = builder.Build(); 
    } 

    public void ConfigureServices(IServiceCollection services) 
    { 
     services.AddMvc(); 
     services.AddCors(); 

     services.Configure<AppSettings>(Configuration); 
    } 

    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) 
    { 
      app.UseCors(builder => builder.WithOrigins(new[] { "http://test.com" }) 
       .AllowCredentials()); 


      app.UseDeveloperExceptionPage(); 

      app.UseMvc(routes => 
      { 
       routes.MapRoute(
        "default", 
        "{controller=ping}/{action=get}/{id?}"); 
      }); 

      app.UseStaticFiles(); 

     } 
+0

這聽起來很有趣,什麼是來自服務器的響應頭? (你是使用Kestrel還是IIS管道) – Coemgen

+0

響應中的標題看起來像這樣... Content-Encoding→gzip Content-Type→text/plain;字符集= UTF-8 日期→週四,2017年6月29日11時45分28秒GMT 服務器→紅隼 傳輸編碼→分塊 因人而異→接受編碼 X供電,通過→ASP.NET –

+0

嗯,我我不確定你的政策是否被考慮過。 Kestrel應該添加一個頭文件(看看這個微軟示例https://docs.microsoft.com/en-us/aspnet/core/security/cors#how-cors-works) – Coemgen

回答

0

的反應是比較容易:

CORS標頭僅跨域請求報文See that example

所以,當你在當地進行測試時,它並不奏效。嘗試在具有域名的服務器上託管您的應用,並與郵遞員聯繫。它將不起作用。

編輯:

好的,這是你的配置文件,這是不正確的。您需要在AddMVC之前輸入AddCors。因爲,在執行管線,該框架將在啓動時你聲明的順序執行..

services.AddCors(options => 
     { 
      options.AddPolicy("AllowSpecificOrigin", 
       politique => politique.WithOrigins("{yourdomain}").AllowAnyHeader().AllowAnyMethod().AllowCredentials()); 
     }); 

eapp.UseCors("AllowSpecificOrigin"); 
+0

這就是我所希望的,但我仍然可以稱之爲成功的原因。 –

+0

好的,在你配置的時候,我遇到了問題。看到我的編輯 – Coemgen

+0

不幸的是,這並沒有解決它。 –

相關問題