正确理解具有相同主机/不同端口和安全性的 CORS

Posted

技术标签:

【中文标题】正确理解具有相同主机/不同端口和安全性的 CORS【英文标题】:Properly Understanding CORS with Same Host / Different Port & Security 【发布时间】:2015-05-16 01:38:22 【问题描述】:

我不做太多客户端网络编程,所以我试图掌握这个概念与我的具体情况的关系。

我有一个 RESTful WCF 服务在 50000 的端口上运行。此外,我有一堆用 html5/CSS3/javascript 编写的 Web 表单(不是 ASP WebForms),它们对这个 WCF 服务进行 AJAX 调用。 Web 表单托管在同一主机上,但使用端口 80。Web 表单进行的 AJAX 调用都是 GET 仅请求。

此外,我有一个位于完全不同位置(不同主机)的第三方云托管应用程序,它也需要调用 WCF 服务。此通信正在向 WCF 服务执行 POSTs 和 PUTs。

显然,来自第三方托管云应用程序的调用是跨源的。从我的研究看来,不同的端口实际上是不同的起源。

我知道安全性和 CORS 是不同的概念,但这是我想要完成的,我需要更好地了解所有这些是如何工作的: 现在我允许所有跨域请求,一切正常,但我想限制它以提高安全性,然后最终使用相同的证书设置具有传输安全性的 HTTPS 和 webforms 和 WCF 服务。第三方云服务托管应用程序仍然需要能够与 WCF 服务通信,因此我需要允许它以不同的方式进行身份验证,这样可以通过传递密钥来完成,因为一切都是服务器端的仅限。

整个交流“三角”对我来说感觉很模糊,我希望 SO 是我发布这个问题的正确位置,因为它与代码没有直接关系。

    上述 WCF - Web 表单情况是否被视为跨域? A) 如果以上不是跨域的,那么我是否只需要在我的 web.config 中传递 Access-Control-Allow-Origin: 'https://my-cloud-host' 吗?B)如果是我理解,只需要在标题中回显允许的来源。在这种情况下,我在 IIS 中为 Access-Control-Allow-Origin 设置什么(如果有的话)?如果不允许,我应该回显什么,只是原始来源? 如果它们托管在不同的端口上,我的想法是否可以使用相同的证书进行相互 SSL 身份验证?这会阻止云服务与 WCF 服务进行通信,还是有第二个端点允许这样做? 我疯了吗?我对这整件事感到很困惑。

【问题讨论】:

【参考方案1】:
    是的。在除 IE 之外的所有主流浏览器中,不同的端口被视为另一个来源。 A) 是正确的。您只需要允许您的端口 80 源发送请求。 我不确定。我倾向于相信 SSL 是端口感知的,您不能在不同的端口上使用相同的证书。 您可以阅读this excellent article 让您的大脑休息一下。

【讨论】:

以上是关于正确理解具有相同主机/不同端口和安全性的 CORS的主要内容,如果未能解决你的问题,请参考以下文章

Cors跨域

具有相同端口的不同虚拟主机

是否可以在相同的主机名和端口上运行 webpack 开发服务器和后端服务器以避免 CORS?

.Net Core CORS跨域详解及使用

关于安全性问题:(XSS,csrf,cors,jsonp,同源策略)

同源和跨域