Azure 调用webapi时,请求的资源上不存在访问控制允许原始标头
我正试图遵循Azure示例,通过此处提供的WSFederation将Azure广告集成到我的MVC4.6Web应用程序中 此示例按预期工作。但是,当我在同一个MVC项目中添加WebApi控制器并用[Authorize]装饰时,它会出错。在这个新添加的WebApi控制器中,我有一个对GET方法的ajax请求 错误是:Azure 调用webapi时,请求的资源上不存在访问控制允许原始标头,azure,azure-active-directory,ws-federation,Azure,Azure Active Directory,Ws Federation,我正试图遵循Azure示例,通过此处提供的WSFederation将Azure广告集成到我的MVC4.6Web应用程序中 此示例按预期工作。但是,当我在同一个MVC项目中添加WebApi控制器并用[Authorize]装饰时,它会出错。在这个新添加的WebApi控制器中,我有一个对GET方法的ajax请求 错误是: XMLHttpRequest cannot load https://login.microsoftonline.com/85c96496-fbc6-4bf3-bfcc-fb51c
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.
谢谢你的帮助 为web API添加
Authorize
标记后,需要先登录web应用程序,然后再调用Ajax请求此web API。然后Ajax请求将自动发送cookies进行身份验证,并返回正确的结果
如果在登录之前调用web API的Ajax请求,由于web API受到保护,并且web应用程序正在与Azure AD集成,因此请求将重定向到Azure AD的登录页面,这是不允许跨域请求的。这就是这个问题的根本原因。在为web API添加
Authorize
标记后,您需要在调用Ajax请求此web API之前登录web应用程序。然后Ajax请求将自动发送cookies进行身份验证,并返回正确的结果
如果在登录之前调用web API的Ajax请求,由于web API受到保护,并且web应用程序正在与Azure AD集成,因此请求将重定向到Azure AD的登录页面,这是不允许跨域请求的。这就是这个问题的根本原因。受保护的webapi控制器不能像其他(受保护的)MVC控制器那样自动将用户重定向到登录屏幕吗?它已经将请求重定向到Azure AD的登录页面(正如错误消息中提到的链接),但是,由于您使用的是Ajax,因此无法启用用户登录。您可以直接在浏览器中请求web API,它应该将用户重定向到登录页面。那么我应该如何处理我的场景呢?my web app的用户可以通过ajax或服务器端MVC控制器操作以任意顺序调用WebApi。我不能强迫他们先使用MVC控制器。感谢您的建议。在这种情况下,您需要提示用户登录,然后才能使用Ajax调用web API。例如,您可以在用户登录之前隐藏该按钮。明白了!此外,该示例使用cookie存储WS-Fed令牌。是推荐还是有其他建议选项?我可以在MVC和WebApi的头中传递令牌吗?如果是,你能给我指一些演示/文档吗?再次感谢!受保护的webapi控制器不能像其他(受保护的)MVC控制器那样自动将用户重定向到登录屏幕吗?它已经将请求重定向到Azure AD的登录页面(正如错误消息中提到的链接),但是,因为您使用的是Ajax,因此无法启用用户登录。您可以直接在浏览器中请求web API,它应该将用户重定向到登录页面。那么我应该如何处理我的场景呢?my web app的用户可以通过ajax或服务器端MVC控制器操作以任意顺序调用WebApi。我不能强迫他们先使用MVC控制器。感谢您的建议。在这种情况下,您需要提示用户登录,然后才能使用Ajax调用web API。例如,您可以在用户登录之前隐藏该按钮。明白了!此外,该示例使用cookie存储WS-Fed令牌。是推荐还是有其他建议选项?我可以在MVC和WebApi的头中传递令牌吗?如果是,你能给我指一些演示/文档吗?再次感谢!