如何在 IIS 8 中使用“访问控制允许源”允许多个域

本文关键字:访问控制 许源 许多个 IIS | 更新日期: 2023-09-27 17:57:09

经过几个小时的阅读,我发现IIS不支持多个
"Access-Control-Allow-Origin"标头。

此外,不允许使用 "*" 设置值,否则会出现错误:

通配符"*"不能在"访问控制-允许-原点"中使用 凭据标志为 true 时的标头。因此,原点"空"是 不允许访问。

其他 SO 问题提出了像这个或这个这样的解决方案,但我不知道我必须在哪里更改标题。

我的应用程序是用 .NET 编写的,我使用的是 IIS 8.5。我的目标是为多个源域执行 CORS 请求。我是否必须编写一个 IHttpModule 来处理源标头?

如何在 IIS 8 中使用“访问控制允许源”允许多个域

我想出了自己的解决方案,它也可以像Google+或Facebook身份验证一样工作。这是另一个基于 iFrame 身份验证的 SO 问题

您可以使用 iFrame 作为中间件。在 iFrame 中,我向同一源/域上的应用程序发出请求。

例如:

我的应用程序来自 www.domainA.com 另一个来自 www.domainB.com,它们都包含来自 www.hostingdomain.com 的iFrame。

从 www.hostingdomain.com 开始,我确实调用了我的Web服务,并基于.NET FormsAuthentication设置了一个cookie。对于IE,您必须使用P3P来设置第三方cookie。

您可以使用

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://learn.microsoft.com/en-us/iis/extensions/cors-module/cors-module-configuration-reference