2017-09-15 40 views
0

因此,我開發了一個允許跨域訪問的asp.net內核API。我已經能夠讓所有的設置和運行。我已經啓用CORS,並希望它應用在所有我的端點的相同的設置,以便在我的配置方法如下:.NET Core ASP CORS在Azure VM上不受限制

app.UseCors(builder => builder.WithOrigins(
    "http://localhost:3000", 
    "http://localhost:3001", 
    "https://staging.example.com", 
    "https://production.server.com") 
    .AllowAnyMethod() 
    .AllowAnyHeader() 
    .AllowCredentials()); 

在我ConfigureServices方法:

services.AddCors(); 

的代碼在MVC中間件之前以及在本地運行時,我必須從localhost:3000發送請求,因爲所有其他人都被拒絕/阻止(如預期的那樣)。

此外,在分期和生活的應用程序工作正常,可以調用API沒有任何問題。

但是,當部署到分段或生產時,我可以使用郵遞員從本地計算機調用API,也可以將我的本地Web應用程序副本(AngularJS應用程序)指向API。

也許我錯過了一些東西,或者我的理解錯誤,但我認爲這不應該被允許!如果沒有,那麼關於我可能出錯的地方有什麼想法?看起來好像我的API允許來自任何域的任何請求。

+0

請參閱答案在https://stackoverflow.com/questions/43432743/will-asp-net-core-cors-policy-prevent-resource-access-from-non-browser-requests/43432787#43432787 – sideshowbarker

回答

2

CORS只有約阿賈克斯域A請求從網頁到域B.郵差是一個開發工具,不是一個網頁,它並不關心CORS,這就是爲什麼你的郵差請求不被阻止。這與構建控制檯應用程序向您的api發出http請求相同,即請求不會被阻止。 關於角度客戶端,您的請求未被阻止,因爲您允許http://localhost:3000http://localhost:3001的來源。如果您嘗試使用允許來自說http://localhost:3002的阿賈克斯呼叫,應該阻止它

此處的一個選項是提取config/json文件中的來源。例如,你將有appsettings.Development.json的東西,如:

{ 
    "cors": { 
    "Origins": ["http://localhost:3000", "http://localhost:3001"] 
    } 
} 

和附加文件在生產(分期)環境中運行時appsettings.Production(分期)以.json。

如果您想要完全安全安全您的其他API,您應該考慮添加JWT身份驗證。例如,在遊戲中添加Identity Server 4,或者使用Azure B2C AD。但這意味着您還應該爲Angular客戶端添加Login。

+0

謝謝那把我整理出來了。我也打算爲客戶端提供一個API密鑰。我們不能讓用戶登錄,因爲它是匿名調查問卷/調查應用程序。 –