Политика CORS в ASP. net core3.1 - PullRequest
       19

Политика CORS в ASP. net core3.1

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

У меня есть следующий API-код. net core

public void ConfigureServices(IServiceCollection services)
{
..............
services.AddCors(options =>
            {
                options.AddPolicy("CorsPolicy",
                                    builder => builder
                                    .AllowAnyMethod()
                                    .AllowAnyHeader()
                                    .WithOrigins("https://domain.com.xx")
                                    .AllowCredentials()
                                 );
            });

            services.AddControllers();
            services.AddMvc().AddMvcOptions(x=>x.EnableEndpointRouting = false);
}

и мой метод Configure как

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

            app.UseHttpsRedirection();
            app.UseRouting();
            app.UseAuthentication();
            app.UseAuthorization();
            app.UseCors("CorsPolicy");
            app.UseMvc();
        }

Я получаю Доступ к XMLHttpRequest в ' https://apiservername/api/mycall 'от источника' https:domain.com.xx 'был синхронизирован политикой CORS: в запрошенном ресурсе отсутствует заголовок' Access-Control-Allow-Origin '.

Клиент находится в Angular 7, и метод, который я вызываю, является методом POST. Я всегда работал с http. На стороне клиента на перехватчике я добавляю

intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
............
....
    url: request.url.replace('http://','https://')
}

и задаюсь вопросом, не упускаю ли я что-то здесь. Сайт клиента (In angular) и сторона API (. NET Core ASP 3.1) настроены как https. --- отредактировано-- Я включил обработку исключений и после этого получил сообщение об ошибке ниже от просмотра событий.

System.InvalidOperationException: IDX20803: Unable to obtain configuration from: 'https://login.microsoftonline.com/common/.well-known/openid-configuration'.
 ---> System.IO.IOException: IDX20804: Unable to retrieve document from: 'https://login.microsoftonline.com/common/.well-known/openid-configuration'.
 ---> System.Net.Http.HttpRequestException: No connection could be made because the target machine actively refused it.
 ---> System.Net.Sockets.SocketException (10061): No connection could be made because the target machine actively refused it.
   at System.Net.Http.ConnectHelper.ConnectAsync(String host, Int32 port, CancellationToken cancellationToken)
   --- End of inner exception stack trace ---

Означает ли это, что проблема связана с аутентификацией токена? Я использую Azure AD для проверки подлинности имени входа, а затем проверяю его для использования основных веб-интерфейсов asp. net.

Ответы [ 3 ]

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

Попробуйте, чтобы увидеть, работает ли он для вас. Просто игнорируйте часть MVC. Я просто хочу указать порядок, потому что порядок конвейера имеет значение

public void ConfigureServices(IServiceCollection services)
{
      services.AddCors();
      services.AddMvc();
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    app.UseCors(
        options => options.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader()
    );

    app.UseMvc();
}
0 голосов
/ 16 апреля 2020

Извините, я должен был опубликовать / отслеживать как-то go. Проблема была в firewall , который должен быть открыт. Я посоветовал инфра-команде разрешить мне войти, и мне понравилось, что информация в ссылке UnblockFirewall помогла нам. Наконец это работает.

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

Попробуйте использовать вместо этого .WithOrigins ("domain.com.xx")

...