如何通过在 IIS 8 中使用“Access-Control-Allow-Origin”来允许多个域
Posted
技术标签:
【中文标题】如何通过在 IIS 8 中使用“Access-Control-Allow-Origin”来允许多个域【英文标题】:How can I allow multiple domains by using "Access-Control-Allow-Origin" in IIS 8 【发布时间】:2015-09-04 06:26:23 【问题描述】:经过几个小时的阅读,我发现 IIS 不支持多个"Access-Control-Allow-Origin"
标头。
也不允许使用"*"
设置值,但错误:
不能在“Access-Control-Allow-Origin”中使用通配符“*” 当凭证标志为真时标头。因此,原点“空”是 不允许访问。
其他 SO 问题提出了解决方案,例如 this 一个或 this 一个,但我不知道我必须在哪里更改标题。
我的应用程序是用 .NET 编写的,我使用的是 IIS 8.5。我的目标是对多个源域进行 CORS 请求。我必须写一个IHttpModule 来处理源头吗?
【问题讨论】:
为什么您需要凭据和多个来源? @ErikFunkenbusch 因为一个页面发出另一个请求,但如果未经身份验证则不允许。 我不明白你的意思......你将不得不更具描述性。 @ErikFunkenbusch 我的意思是我有来自域 A、B、C 的 CORS 请求。在 web.config 中,您只需添加一个 ACAO<add name="Access-Control-Allow-Origin" value="www.domainA.com" />
我需要的不仅仅是域 A!因此,我必须将更改后的原始标头发回以接受多个域。如果我将值更改为*
,则 CORS 请求在客户端不起作用 - e。 G。 Google Chrome、FireFox 等。
那仍然没有回答我的问题。你为什么需要这个?我没有问你需要什么,我问你为什么需要它。标准不允许。你无法改变这一点。唯一可能的解决方案是,在代码中查看请求域,然后为该域动态发出 ACAO。
【参考方案1】:
我想出了自己的解决方案,它也适用于 Google+ 或 Facebook auth。这是基于iFrame auth的另一个SO问题
您可以使用 iFrame 作为中间件。在 iFrame 中,我向同一来源/域上的应用程序发出请求。
例如:
我的应用程序来自 www.domainA.com,另一个来自 www.domainB.com,它们都包含来自 www.hostingdomain.com 的 iFrame。
从 www.hostingdomain.com 我确实调用了我的 web 服务并设置了一个基于 .NET FormsAuthentication 的 cookie。对于 IE,您必须使用 P3P 来设置 3rd party cookie。
【讨论】:
【参考方案2】:您可以使用 IIS CORS 模块:https://www.iis.net/downloads/microsoft/iis-cors-module
您的 web.config 应该是这样的,替换您的域的 [origin_#]:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<cors enabled="true" failUnlistedOrigins="true">
<add origin="[origin_1]">
<allowMethods>
<add method="GET" />
<add method="HEAD" />
<add method="POST" />
<add method="PUT" />
<add method="DELETE" />
</allowMethods>
</add>
<add origin="[origin_2]">
<allowMethods>
<add method="GET" />
<add method="HEAD" />
<add method="POST" />
<add method="PUT" />
<add method="DELETE" />
</allowMethods>
</add>
</cors>
</system.webServer>
</configuration>
您可以在这里找到配置参考:https://docs.microsoft.com/en-us/iis/extensions/cors-module/cors-module-configuration-reference
【讨论】:
以上是关于如何通过在 IIS 8 中使用“Access-Control-Allow-Origin”来允许多个域的主要内容,如果未能解决你的问题,请参考以下文章
在 Windows 8 的 IIS 8 上使用 .NET 4.5 的 MVC 4 网站给出 403.14 禁止错误 [关闭]