Web Api 2、OWIN 和 Identity Server 的 CORS 配置问题

Problem on CORS configuration with Web Api 2, OWIN and Identity Server

我在同一域下有几个 Web 应用程序,所有应用程序都使用独立的 Identity Server 3 应用程序进行登录。在测试环境下,每一个都在同一个域下(http://192.168.100.1,或通过 dns http://companyServer)。

最近一个应用需要向另一个应用请求一些数据,在Visual Studio调试时发现如下错误:

Cross-Origin 请求被阻止:同源策略不允许读取位于 http://companyServer:60000/MyApp/Api/Company/Info?parameter=123 的远程资源。 (原因:CORS header 'Access-Control-Allow-Origin' 不存在)。

我们有一个中央库负责在我们的系统上配置 Web API,它有以下内容(除其他外):

public static IAppBuilder UseCebiUtilWebApi(this IAppBuilder app, CebiWebApiOptions options)
{
    Logger.Debug("Configuring Web API");

    app.UseCors(CorsOptions.AllowAll);

    ...
}

同样的方法,我们也配置Identity Server。

我也查看了我的Login Server App,关于CORS有如下代码:

public class CompanyCorsPolicyService : DefaultCorsPolicyService
{
    public CompanyCorsPolicyService()
    {
        base.AllowAll = true;
    }
}

正在项目的 Startup.cs 上调用此方法。

据我所知,无论来源如何,我环境的每一端都应该启用完整的 CORS 访问。但是 header 仍然不见了。

我在互联网上尝试了很多解决方案:

Using "config.EnableCors" instead of "app.UseCors"

Overriding GrantResourceOwnerCredentials,

我也尝试在 Web.Config 上手动设置一些与 CORS 相关的 headers,但我无法在 SO 上找到具体问题。

我不认为身份服务器与这个问题有关,但由于这是我的环境和我找到的解决方案之间的差异,我决定也把它放在这里。

有什么想法吗?

OPTIONSVerbHandler 可能会拦截所有 OPTIONS (CORS pre-flight) 请求。

尝试禁用它,以便 ASP.Net 可以处理这些请求。