如何在IIS 8中使用“Access-Control-Allow-Origin”允许多个域

时间:2015-06-18 14:35:05

标签: c# asp.net vb.net iis cors

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

不允许使用"*"设置值,错误:

  

'Access-Control-Allow-Origin'中不能使用通配符'*'   凭证标志为true时的标头。因此,原点'null'   不允许访问。

其他SO问题提出了this一个或this一个解决方案,但我不知道在哪里需要更改标题。

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

2 个答案:

答案 0 :(得分:1)

我想出了我自己的解决方案,它也像Google+Facebook auth一样工作。这是另一个基于iFrame auth

的SO问题

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

例如:

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

来自www.hostingdomain.com我会调用我的webservice并根据.NET FormsAuthentication设置一个cookie。对于IE,您必须使用P3P设置3rd party cookie

答案 1 :(得分:0)

您可以使用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