2016-04-26 73 views
6

我們最近將一個API應用程序從Azure雲服務遷移到Azure網站,而且一些客戶端仍在使用我們的傳統協議進行身份驗證,而不是通常的Authorization: Bearer HTTP標頭)。我們需要長時間支持這種身份驗證協議,因爲客戶端無法立即遷移。在Azure網站(Azure應用服務)中啓用Access-Control-Allow-Credentials標頭

爲了支持餅乾在引導到API的橫原點AJAX請求時,客戶端需要的withCredentials設置設爲true在XMLHttpRequest的,並且服務器需要與Access-Control-Allow-Credentials頭以及任何CORS請求repond。

我們面臨的問題是,Azure網站本身管理CORS,並且使用自己的配置(限於允許的來源列表)來響應,該配置不允許設置此標頭。 。因此打破了我們所有Ajax客戶端的應用程序!

有沒有辦法(暫時)在響應中添加此頭文件?

回答

11

我們終於明白了Azure的應用CORS中間件的行爲。要禁用它,您必須清除Web應用程序CORS刀片中的每個允許的原始條目(包括*)。然後,您可以使用Web Api 2功能或使用web.config自行管理CORS。

的信息,甚至可以在the documentation

不要試圖在一個API的應用程序同時使用的Web API CORS和應用服務CORS。應用服務CORS將優先,Web API CORS將不起作用。例如,如果您在App Service中啓用一個原始域,並在您的Web API代碼中啓用所有原始域,則您的Azure API應用程序將只接受來自您在Azure中指定的域的調用。

所以最終的答案是:如果您的應用程序不需要特定的CORS管理,則可以使用Azure App Service CORS。否則,您需要自己處理它,並禁用Web應用程序中的所有CORS配置。

+0

謝謝!在Azure託管的ServiceStack應用程序中使用CORS時遇到了很多麻煩。事實證明,從Azure門戶移除CORS配置可以解決所有問題。 –

+0

奇怪的是,它應該有一個切換來禁用Azure cors,只需刪除所有網站即可禁用它並傳遞到您的應用。如果列出了任何來源,它似乎會刪除您擁有的任何其他CORS標題(包括創建,方法等)。我認爲進入一個網站的某種解釋會使它成爲可能,並且應該提供用於這些其他標題的值。我認爲它應該給出一些類似的錯誤或警告自動刪除您的標題太... –

1

這是您可以在web應用程序中提供的web.config文件中執行的操作。

您可以使用Visual Studio Online(Monaco)進行編輯,該工具是從Azure門戶添加的工具。

在這裏閱讀更多:http://enable-cors.org/server_iis7.html

+0

我對這種方法持懷疑態度,因爲我認爲Azure網站CORS中間件覆蓋了託管應用程序設置的所有CORS頭文件來設置它自己的,但是我會盡可能地嘗試並讓您知道。 –

+0

這就是我認爲的,在客戶端和我們的應用服務器之間有一個Azure網站中間件,它只需刪除服務器設置的所有CORS相關頭並用它自己替換它們,因此添加一個自定義的'Access-Control-Allow- web.config文件中的Credentials'頭不起作用。任何其他自定義標題都已正確添加,但CORS標題不是。 –