2016-07-28 87 views
1

我遇到一個奇怪的問題。我有一個運行在Azure App Service(網站)下的Asp.net Core WebApi項目。我在Chrome中使用DHC插件。我的服務也與AAD一起運行。Azure網站Rest Api只接受GET,POST返回403.可能是CORS

我可以請求GET方法就好(登錄後)。但是,當我請求任何POST時,我得到了403響應。在日誌中環視,我可以看到這個

2016-07-28T08:14:26 PID [X]詳細接收的請求:POST https://blahblah.azurewebsites.net/api/build/beep/

2016-07-28T08:14:26 PID [ x]詳細找到'AppServiceAuthSession'網站'blah.azurewebsites.net'的cookie。長度:856

2016-07-28T08:14:26 PID [X]信息發送響應:403.60禁止

2016-07-28T08:14:26 PID [X]警告跨站請求僞造檢測到用戶'[email protected]'from referer''!

我使用的是Asp.net Core 1.0。我在我的代碼(AllOrigin AllHeader)中啓用了CORS,以及Azure網站中的CORS有一個'*'的條目,它應該可以接受每個來源。日誌流似乎甚至不會觸及我的網站,但Azure中的某些內容會阻止請求。

任何幫助?

編輯: 一個成功的GET方法

2016-07-28T20:24:35 PID [22880]詳細接收的請求:GET https://blah.azurewebsites.net/api/build/beep/

2016-07-28T20:24:35 PID [22880]詳細找到網站'blah.azurewebsites.net'的'AppServiceAuthSession'Cookie。長度:876.

2016-07-28T20:24:36 PID [22880]詳細驗證了[email protected]成功使用'會話Cookie'認證。

+0

看起來您的JavaScript客戶端正被身份驗證/授權模塊的CSRF保護阻止,它目前不知道CORS配置(它可能應該)。在你的場景中,最終用戶最初是如何登錄的? –

+0

我使用chrome驗證AAD和我的公司證書。登錄後,Azure可讓GET請求順利進行。我編輯我的帖子也包括成功的GET請求的日誌。 –

回答

2

貌似被封鎖你的JavaScript客戶端通過認證/授權模塊的CSRF保護,目前不知道CORS設定(它可能應該 - 我會考慮這一點)。

解決此問題的最簡單方法是在客戶端設置中添加一個自定義的User-Agent HTTP標頭。我們內置的CSRF保護所尋找的一件事是客戶端是否是瀏覽器。幾乎所有主流瀏覽器都使用「Mozilla/...」作爲用戶代理字符串。將其更改爲其他內容以明確您不是瀏覽器,並且您的POST請求將成功完成。

+0

我可以證實這是正確的答案。將User-Agent設置爲其他內容,例如'foo'。謝謝克里斯 –