Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure 调用webapi时,请求的资源上不存在访问控制允许原始标头_Azure_Azure Active Directory_Ws Federation - Fatal编程技术网

Azure 调用webapi时,请求的资源上不存在访问控制允许原始标头

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

我正试图遵循Azure示例,通过此处提供的WSFederation将Azure广告集成到我的MVC4.6Web应用程序中

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

谢谢你的帮助

为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的头中传递令牌吗?如果是,你能给我指一些演示/文档吗?再次感谢!