Проблема с CORS .NetCore3 web api, Ответ на предполётный запрос не проходит проверку контроля доступа - PullRequest
0 голосов
/ 30 апреля 2020

NetCore 3.0 и Angular оба работают на моем LOCALHOST, это проект аутентификации, и я настраиваю мой запуск так:

 public class Startup
{

    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddAuthentication(opt => {
            opt.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
            opt.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
        })
        .AddJwtBearer(options =>
        {
            options.TokenValidationParameters = new TokenValidationParameters
            {
                ValidateIssuer = true,
                ValidateAudience = true,
                ValidateLifetime = true,
                ValidateIssuerSigningKey = true,

                ValidIssuer = "https://localhost:44361",
                ValidAudience = "https://localhost:4200",
                IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("superSecretKey@345"))
            };
        });

        services.AddCors(options =>
        {
            options.AddPolicy("EnableCORS", builder =>
            {
                builder.WithOrigins("http://localhost:4200")
                .AllowAnyHeader()
                .AllowAnyMethod();
            });
        });

        services.AddControllers();
    }

    // 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.UseHttpsRedirection();
        app.UseCors("EnableCORS");

        app.UseRouting();

        app.UseAuthentication();
        app.UseAuthorization();

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

Мой Angular работает на порту localhost: 4200 и мой API работает на localhost: 44361

любая идея, почему я получаю эту ошибку - очень странно, кажется, все хорошо, не должно быть так сложно, или я что-то упускаю - его 3 дня я работаю над этим все еще безуспешно

1 Ответ

0 голосов
/ 02 мая 2020

При маршрутизации на конечную точку промежуточное программное обеспечение CORS должно быть настроено на выполнение между вызовами UseRouting и UseEndpoints.

Вы можете прочитать это указано в документации по разрешению перекрестных запросов в Документах Microsoft .

Переместите app.UseCors() так, чтобы он находился где-то между промежуточным ПО маршрутизации и конечной точки.

        app.UseRouting();
        app.UseCors("EnableCORS");

        app.UseAuthentication();
        app.UseAuthorization();

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