C# 我是否需要ASP.NET Core 2.0 API中的CORS支持来进行服务器到服务器的通信

C# 我是否需要ASP.NET Core 2.0 API中的CORS支持来进行服务器到服务器的通信,c#,asp.net-core,cors,asp.net-core-2.0,asp.net-core-middleware,C#,Asp.net Core,Cors,Asp.net Core 2.0,Asp.net Core Middleware,我有一个ASP.NET Core 2.1 API,它已经开发了一段时间。在我的Startup.cs中,我定义了如下所示的CORS开发政策 services.AddCors(options => { options.AddPolicy("CorsDevPolicy", builder => builder.AllowAnyOrigin() .AllowAnyMetho

我有一个ASP.NET Core 2.1 API,它已经开发了一段时间。在我的Startup.cs中,我定义了如下所示的CORS开发政策

        services.AddCors(options =>
        {
            options.AddPolicy("CorsDevPolicy",
                builder => builder.AllowAnyOrigin()
                .AllowAnyMethod()
                .AllowAnyHeader()
                .AllowCredentials());
        });
基本上是一个开放的政策

现在我们正在准备生产版本,我想确保这是正确的安全

但是,我对CORS没有太多的经验,在研究这个主题时,我想知道我是否真的需要担心限制CORS策略,因为我的API实际上不是直接从web浏览器调用的,而是从使用HttpClient的客户端应用程序调用的

此外,我的API需要OAuth2.0访问令牌,这样只有我在Azure Active Directory中注册的客户端应用程序才能访问API。那么,我需要担心在这种情况下限制我的CORS策略吗

如果我确实需要限制我的CORS策略,那么最好的限制方法是添加如下内容,其中包括访问API的每个站点的特定客户端域列表

services.AddCors(options =>
    {
        options.AddPolicy("CorsProdPolicy",
            builder => 
                builder.WithOrigins(
                          "https://client1.com", 
                          "https://client2.com",
                           ...
                           ...
                           ...   
                          "https://client100.com"
               )
               .AllowAnyMethod()
               .AllowAnyHeader()
               .AllowCredentials());
    });

或者有更好的方法吗?

只有当某个域的网站通过浏览器访问另一个域的资源时,您才需要CORS。如果提供凭据,您也不能允许任何来源(必须指定来源)。@正如Amy指出的Cors,Cors会向请求添加一个标题,这取决于浏览器来处理。如果您想采取其他措施来保护您的站点,如果您自己的服务器调用您自己的服务器,您可以从客户端计算机额外列出IP的白名单(如果是),那么您的授权应该处理该问题。因此,要确认的是,.NET Core HttpClient并不像现代浏览器那样实现CORS。因此,只要我不是通过实际的浏览器访问API,CORS就不是问题?CORS是浏览器唯一的东西。数一数它提到“浏览器”的次数。基于代码的HTTP访问不需要它。@Amy如果你想将此作为答案发布,我会给你分数