【问题标题】:How should I set net core api cors?我应该如何设置 net core api cors?
【发布时间】:2021-09-03 14:43:04
【问题描述】:

我正在为自己编写一个非官方的 twitter api。然后我通过以下方法使用浏览器中的控制台屏幕向此 api 发送一个 get。

function httpGet(theUrl)
{
    var xmlHttp = new XMLHttpRequest();
    xmlHttp.open( "GET", theUrl, false ); // false for synchronous request
    xmlHttp.send( null );
    return xmlHttp.responseText;
}

这样的

httpGet(https://localhost:44311/WeatherForecast/alienationxs/true);

问题是,当我通过www.google.com 执行此操作时,一切正常,并且 json 数据到达了我的手中。但是当我通过 twitter.com 执行此操作时,我收到以下错误。

通过 google.com

我在 api 上的 cors 设置

public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllers();
            services.AddCors(options =>
      options.AddDefaultPolicy(builder =>
      builder.AllowAnyHeader().AllowAnyMethod().AllowAnyOrigin())); ;
           
            services.AddMvc();
            services.AddSwaggerGen(c =>
            {
                c.SwaggerDoc("v1", new OpenApiInfo { Title = "twitterAPI", Version = "v1" });
            });
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
           
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
                app.UseSwagger();
                app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "twitterAPI v1"));
            }

           
            app.UseRouting();
            app.UseCors(builder => builder
             .AllowAnyOrigin()
             .AllowAnyMethod()
             .AllowAnyHeader());
            app.UseAuthorization();
            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
            });
        }

我只想通过 twitter.com 访问我的 api,就像 google.com 一样。

【问题讨论】:

  • 如果你能连接google.com,你应该先确保这个twitter api可以访问

标签: asp.net-web-api asp.net-core-webapi content-security-policy


【解决方案1】:

Twitter API 不支持 CORS。

【讨论】:

  • 抓取 Twitter 是违反服务条款的。我会从你的帖子中删除 twitter 标签,因为你问的是一个通用的网络编程问题,而不是 Twitter。
【解决方案2】:
  1. 首先,让我们将苍蝇与肉饼分开。
  • 跨域资源共享 (CORS) - 是一个单独的安全层。

  • 内容安全策略 (CSP) - 是一个单独的安全层,在 CORS 之前应用。通过 CSP 后,如果最后一个被破坏,您可以面对 CORS。

您可以从错误消息“...因为它违反以下内容安全策略指令...”中看到,您面临 CSP 违规,因此您的 CORS 设置没有意义。 p>

  1. 发生了什么事。

您进入twitter.com 网页并尝试代表twitter 网页向localhost:44311 执行连接请求。但是 twitter 的网页受 CSP 保护,禁止此类请求: 注意管理 XMLHttpRequest() 的“connect-src”指令。

www.google.com网页没有CSP,所以你代表google请求成功。

【讨论】:

  • 那么有什么办法可以解决这个问题吗?
  • 没办法。在错误赏金计划下绕过 Chrome 中的 CSP 费用 $20,000
猜你喜欢
  • 1970-01-01
  • 2021-04-17
  • 2020-01-26
  • 2021-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-17
  • 2018-10-13
相关资源
最近更新 更多