使用Web Api 2,OWIN和Identity Server进行CORS配置时遇到问题

问题描述

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

最近,一个应用程序需要从另一个应用程序请求一些数据,在Visual Studio上进行调试时,我发现了以下错误

跨域请求被阻止:“相同来源策略”不允许读取http:// companyServer:60000 / MyApp / Api / Company / Info?parameter = 123上的远程资源。 (原因:CORS标头“ 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访问权限,无论其来源是什么。但是标题仍然丢失。

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

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

Overriding GrantResourceOwnerCredentials,

我也尝试过在Web.Config上手动设置一些与CORS相关的标头,但是我在SO上找不到特定的问题。

我不认为身份服务器与此问题有关,但是由于那是我的环境和找到的解决方案之间的区别,因此我决定也将其放在此处。

有什么想法吗?

解决方法

OPTIONSVerbHandler可能会拦截所有OPTIONS(CORS飞行前)请求。

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