Политика CORS для локального хоста на AspNetCore - PullRequest
1 голос
/ 06 февраля 2020

Я пытаюсь работать с AspNetCore, и я застрял в этом. Когда я отправляю запрос с помощью почтальона, все работает нормально, но когда я пытаюсь сделать это с помощью браузера, это не работает. Я использую AspNetCore 3.1.

Startup.cs

namespace PMES.HelpDesk.WebAPI
{
    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        public void ConfigureServices(IServiceCollection services)
        {
            //...

            services.AddCors(opt => 
            {
                opt.AddPolicy("AllowOrigin", options => {
                    options.AllowAnyOrigin();
                    options.AllowAnyMethod();
                    options.AllowAnyHeader();
                });
             });

           //...
        }


        public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
                IdentityModelEventSource.ShowPII = true;

            }
            else
            {
                app.UseHsts();
            }

            app.UseHttpsRedirection();
            app.UseRouting();
            app.UseCors("AllowOrigin");
            app.UseAuthentication();
            app.UseAuthorization();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
            });
        }
    }
}

Сообщение об ошибке

Доступ к XMLHttpRequest в 'http://localhost: 5000 / api / session / authenticate ' from origin 'http://localhost: 8080 ' заблокирован политикой CORS: Ответ на запрос предполетной проверки не пройти проверку контроля доступа: перенаправление не разрешено для предварительного запроса.

РЕДАКТИРОВАТЬ 1

Мой внешний интерфейс построен с Vue, и это мой запрос

axios
.get(`http://localhost:5000/api/session/authenticate`, {
    headers: {
        Authorization:
            'Bearer ' +
             'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMTQ0NjE3Nzc0MiIsIm5hbWUiOiJGZWxpcGUgRW5kbGljaCIsImlhdCI6MTUxNjIzOTAyMiwiZXhwIjoxNTk2MzM5MDIyfQ._VcxTFt6N0oe-QKeyant8lCzcpC2AL69tFcADLBbXO0'
    }
})
.then(response => {
    window.console.log(response.data);
})
.catch(error => {
    window.console.log(error);
});

РЕДАКТИРОВАТЬ 2

Когда я отправляю запрос почтальона, я получаю эти заголовки

Date: Thu, 06 Feb 2020 20:08:11 GMT
Server: Kestrel
Content-Length: 0
Allow: GET
Access-Control-Allow-Origin: *

1 Ответ

1 голос
/ 06 февраля 2020

Ваш запрос OPTIONS в порядке, но, пожалуйста, обратите внимание на следующее: https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS/Errors/CORSNotSupportingCredentials

CORS не может быть прерван, пока withCredentials установлен на true на базовом AJAX контроллер. Похоже, axios не поддерживает его. Смотри: https://github.com/axios/axios/pull/2582

В любом случае, я бы не стал его взламывать. У вас есть два решения:

Я бы определенно предложил второй, который позволяет избежать взлома серверной части с помощью CORS

...