2016-11-30 100 views
1

我試圖遵循Azure的樣品通過此處提供 https://github.com/Azure-Samples/active-directory-dotnet-webapp-wsfederation調用的WebAPI沒有拋出訪問控制允許來源標題出現在所請求的資源

WSFederation天青AD融入我的MVC 4.6的Web應用程序此示例按預期工作。但是,當我在同一個MVC項目中添加一個WebApi控制器並用[Authorize]裝飾它時出錯。我在這個新添加的WebApi控制器中有GET方法的ajax請求。

錯誤是:

XMLHttpRequest cannot load https://login.microsoftonline.com/85c96496-fbc6-4bf3-bfcc-fb51ca874527/wsfe…UIWNgv-EANzWADAQPCOqF--3c7KGt6G21ucvLkce_wMcwVguKz62ioyGPxQg&wa=wsignin1.0. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'https://localhost:4279' is therefore not allowed access. 

感謝您的幫助!

回答

0

爲web API添加Authorize標記後,您需要在調用Ajax請求此Web API之前登錄Web應用程序。然後,Ajax請求將自動發送cookie以進行身份​​驗證,並返回正確的結果。

如果您在登錄之前調用對Web API的Ajax請求,由於Web API受到保護並且Web應用程序與Azure AD集成,請求將重定向到Azure AD的登錄頁面允許跨域請求。這是這個問題的根源。

+0

受保護的webapi控制器不能自動將用戶重定向到其他(受保護的)MVC控制器的登錄屏幕嗎? – Sam

+0

它已將請求重定向到Azure AD的登錄頁面(因爲提到了錯誤消息的鏈接),但是由於您使用的是Ajax,因此無法啓用用戶登錄。您可以直接在瀏覽器中請求Web API,它應該將用戶重定向到登錄頁面。 –

+0

那麼我應該如何處理我的情況呢?我的Web應用程序的用戶可以通過任何順序通過ajax或服務器端MVC控制器操作來調用WebApi。我不能強迫他們先使用MVC控制器。感謝您的意見。 – Sam

相關問題