调用webapi throws请求的资源上不存在Access-Control-Allow-Origin标头

时间:2016-11-30 16:41:08

标签: azure azure-active-directory ws-federation

我正在尝试按照Azure示例通过此处提供的WSFederation将Azure AD集成到我的MVC 4.6 Web应用程序中 https://github.com/Azure-Samples/active-directory-dotnet-webapp-wsfederation

此示例按预期工作。但是,当我在同一个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.

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

在为Web API添加Authorize标记后,您需要在调用Ajax之前登录Web应用程序以请求此Web API。然后,Ajax请求将自动发送cookie以进行身份​​验证,并返回正确的结果。

如果在登录前调用Web API的Ajax请求,由于Web API受到保护且Web应用程序正在与Azure AD集成,该请求将重定向到Azure AD的登录页面,这是不允许的跨域请求。这就是这个问题的根本原因。