【问题标题】:Enable CORS for web api deployed in authentication enabled azure web app service为启用身份验证的 Azure Web 应用服务中部署的 Web api 启用 CORS
【发布时间】:2019-02-27 04:47:34
【问题描述】:

如果我在我的 azure Web 应用程序服务中关闭身份验证,CORS 会出现这个奇怪的问题。

设置:

  1. Web API 由来自不同共享点在线站点的页面访问。
  2. API 部署在 Azure APP 服务中。身份验证已启用。
  3. 我配置为通过 global.asax 全局添加标题。

       Context.Response.AddHeader("Access-Control-Allow-Origin", "*");
        Context.Response.AddHeader("Access-Control-Allow-Headers",
            "Origin, X-Requested-With, Content-Type, Accept,MaxDataServiceVersion");
        Context.Response.AddHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
        Context.Response.AddHeader("Access-Control-Allow-Credentials", "true");
    

结果:

  1. 我尝试禁用身份验证。当然,这不会发生在现场。但是请求成功了,CORS 并没有阻塞任何东西。
  2. 我启用了身份验证,CORS 标头添加到 API URL,但整个请求不起作用,因为默认 Microsoft 登录的身份验证 URL 被阻止。

我确实允许所有来源只是为了查看是否添加了标头,但它一直以某种方式阻止它以获取身份验证 URL。

有没有人遇到过这种情况?还是我错过了某个地方的设置?

提前致谢。

【问题讨论】:

    标签: azure cors asp.net-web-api2 sharepoint-online azure-app-service-envrmnt


    【解决方案1】:

    我认为您不能通过网络配置定义多个源站?有没有办法只用 web.xml 来做到这一点?需要配置或自定义代码来实现吗?

    我们可以通过 Azure 门户轻松为 Azure WebApp 启用 CORS。您使用 * 允许所有来源进行跨域调用。我们可以从tutorial 获得更多关于 azure webapp CORS 的信息。

    跨源资源共享 (CORS) 允许在外部主机上的浏览器中运行的 JavaScript 代码与您的后端交互。指定应允许进行跨域调用的源(例如:http://example.com:12345)。要允许所有,请使用“*”并从列表中删除所有其他来源。不允许将斜杠作为域的一部分或 TLD 之后。

    更新:

    这是 Azure 门户的一个已知限制,将来应该会修复。

    正如你在 CORS 的允许凭证上提到的那样。如果您使用 portal CORS 功能,它不支持,但如果您禁用它(通过删除那里的所有域),您可以在代码中处理 CORS 并对其进行自定义

    更多信息请参考这个blog

    【讨论】:

    • 您好,感谢您的回复。是的,我一开始确实这样做了,它对我不起作用。默认身份验证的 URL“跨源请求被阻止:同源策略不允许读取位于 login.windows.net 的远程资源”。但是,在我当前的设置中,为 api url 添加了标头,但相同的策略一直阻止这个特定的来源。当您回复时,我正在编辑我的解释。 :)
    • @Icee。我已经更新了答案。请不要删除原帖。您可以在其中添加更新。您可以清除 azure 门户中的所有域并在您的代码中进行处理。
    猜你喜欢
    • 2018-02-12
    • 2023-04-03
    • 2016-07-26
    • 1970-01-01
    • 1970-01-01
    • 2015-09-24
    • 2021-12-12
    • 2021-07-24
    • 1970-01-01
    相关资源
    最近更新 更多