ASP. NET Core Cors включен, но не работает - PullRequest
0 голосов
/ 17 июня 2020

Я пытаюсь реализовать политику CORS в моем ASP. NET Core Web API.

Мой файл Startup.cs выглядит следующим образом:

public void ConfigureServices(IServiceCollection services)
{
    options.AddPolicy("AllowSpecificOrigin", builder => builder.WithOrigins("https://google.com")
            .AllowAnyMethod()
            .AllowAnyHeader()
            .AllowAnyOrigin());
    services.AddMvc()
        .AddApplicationPart(Assembly.Load(new AssemblyName("Proxy.Api.Application")))
        .AddJsonOptions(options =>
        {
            options.JsonSerializerOptions.WriteIndented = true;
        });
    services.AddControllers();
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }

    app.UseRouting();
    app.UseCors("AllowSpecificOrigin");
    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllers();
    });
}

Я также добавил атрибут декоратора метода контроллера ниже:

[EnableCors("AllowSpecificOrigin")]
public Task<IActionResult> GetProxy([FromQuery] ProxyParams inputRequest)
{
   ....
}

Теперь, насколько я понимаю, эта строка:

options.AddPolicy("AllowSpecificOrigin", builder => builder.WithOrigins("https://google.com")

позволит только https://google.com домену получить доступ к моему метод контроллера с декоратором атрибута EnableCors.

Однако, когда я вызываю конечную точку API локально через curl или fiddler, метод все еще используется и возвращает 200. Что мне не хватает? Я проверил несколько сообщений, но застрял.

1 Ответ

0 голосов
/ 17 июня 2020

Вы заботитесь о CORS только тогда, когда имеете дело с браузером.

Это означает, что вы можете без проблем делать любой запрос из консольного приложения, веб-службы, CURL, настольного приложения, даже если CORS не настроен.

Но если вы попытаетесь открыть консоль Chrome на вкладке, отличной от Google, и попытаетесь использовать API выборки для связи с вашей конечной точкой: это не удастся.

I не знаю, какова была ваша цель, но на самом деле это не способ защитить ваш API.

Edit Кстати, если это «простой» запрос (без предварительного запроса), например простой GET, ваша конечная точка будет поражена и все равно вернет 200. Это будет отрицать только браузер (вы можете проверить это через Fiddler).

Подробнее о CORS, простых запросах и предполетном запросе: HTTP-запрос от Angular отправлен как OPTIONS вместо POST

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...