Перекрестный запрос заблокирован для запроса POST из Angular в Web.API - PullRequest
0 голосов
/ 28 января 2019

У меня есть небольшое демонстрационное приложение:

  1. Угловое на FE (http://localhost:4200/)
  2. ASP.Net Core на BE (https://localhost:44333/)

Запросы get от FE к BE, похоже, работают нормально, но POST-запрос выдает:

Блокировка перекрестного источника: Политика одного источника запрещает чтение удаленного ресурса на https://localhost:44333/api/auth/login. (Причина: запрос CORS не был выполнен)

HTTP работает нормально. Единственная проблема - с HTTPS.

Почтальон отлично работает с тем же методом API: Postman

Служба Angular выглядит следующим образом:

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { map } from 'rxjs/operators';

@Injectable()
export class AuthService {

  baseUrl = 'https://localhost:44333/api/auth/';

  constructor(private http: HttpClient) {

  }

  login(model: any) {

    return this.http.post(this.baseUrl + 'login', model)
      .pipe(
      map((response: any) => {
        const user = response;
        if (user) {
          localStorage.setItem('token', user.token);
        }
      }));
  }
}

На стороне BE теперь разрешены любые источники:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
        app.UseHsts();
    }

    app.UseHttpsRedirection();
    app.UseCors(x => x.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader());
    app.UseAuthentication();
    app.UseMvc();
}

Источники приложениядоступно на github

Ошибка в консоли сервера dotnet:

  Connection id "0HLK56HC2M58N" request processing ended abnormally. System.IO.IOException: The decryption operation failed,

см. внутреннее исключение. ---> System.ComponentModel.Win32Exception: при обработке сертификата произошла неизвестная ошибка - конец трассировки стека внутренних исключений - в System.Net.Security.SslStreamInternal.ReadAsyncInternal [TReadAdapter] (адаптер TReadAdapter, память 1 buffer) at Microsoft.AspNetCore.Server.Kestrel.Core.Adapter.Internal.AdaptedPipeline.ReadInputAsync(Stream stream) at System.IO.Pipelines.PipeCompletion.ThrowLatchedException() at System.IO.Pipelines.Pipe.GetReadResult(ReadResult& result) at System.IO.Pipelines.Pipe.ReadAsync(CancellationToken token) at System.IO.Pipelines.Pipe.DefaultPipeReader.ReadAsync(CancellationToken cancellationToken) at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.Http1Connection.BeginRead(ValueTask 1 & ожидаемо) в Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpProtocol.ProcessRequests [приложение TContext] (приложение IHttp: 1 * 10).AspNetCore.Server.Kestrel [20] Идентификатор соединения "0HLK56HC2M58O" завершен ненормально.System.IO.IOException: операция дешифрования не выполнена, см. Внутреннее исключение.---> System.ComponentModel.Win32Exception: при обработке сертификата произошла неизвестная ошибка --- Конец трассировки стека внутренней исключительной ситуации --- в System.Net.Security.SslStreamInternal.ReadAsyncInternal [TReadAdapter] (адаптер TReadAdapter, память * 1043)* 1 & ожидаемо) в Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpProtocol.ProcessRequests [TContext] (IHttpApplication 1 application) at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpProtocol.ProcessRequestsAsync[TContext](IHttpApplication 1 приложение) info: Microsoft.AspNetCore.Server.Kestrel [20] идентификатор соединения "0HL5856C2обработка запроса закончилась ненормально.System.IO.IOException: операция дешифрования не выполнена, см. Внутреннее исключение.---> System.ComponentModel.Win32Exception: при обработке сертификата произошла неизвестная ошибка --- Конец трассировки стека внутренней исключительной ситуации --- в System.Net.Security.SslStreamInternal.ReadAsyncInternal [TReadAdapter] (адаптер TReadAdapter, память 1 buffer) at Microsoft.AspNetCore.Server.Kestrel.Core.Adapter.Internal.AdaptedPipeline.ReadInputAsync(Stream stream) at System.IO.Pipelines.PipeCompletion.ThrowLatchedException() at System.IO.Pipelines.Pipe.GetReadResult(ReadResult& result) at System.IO.Pipelines.Pipe.ReadAsync(CancellationToken token) at System.IO.Pipelines.Pipe.DefaultPipeReader.ReadAsync(CancellationToken cancellationToken) at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.Http1Connection.BeginRead(ValueTask 1 & ожидаемо) в Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpProtocol.ProcessRequests [TContext] (IHttpApplication 1 application) at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpProtocol.ProcessRequestsAsync[TContext](IHttpApplication 1 приложение) info: Microsoft.AspNetCore.Server.Kestrel [20] идентификатор соединения "0HL58PH2обработка запроса закончилась ненормально.System.IO.IOException: операция дешифрования не выполнена, см. Внутреннее исключение.---> System.ComponentModel.Win32Exception: при обработке сертификата произошла неизвестная ошибка --- Конец внутренней трассировки стека исключений --- в System.Net.Security.SslStreamInternal.ReadAsyncInternal [TReadAdapter] (адаптер TReadAdapter, память 1 buffer) at Microsoft.AspNetCore.Server.Kestrel.Core.Adapter.Internal.AdaptedPipeline.ReadInputAsync(Stream stream) at System.IO.Pipelines.PipeCompletion.ThrowLatchedException() at System.IO.Pipelines.Pipe.GetReadResult(ReadResult& result) at System.IO.Pipelines.Pipe.GetReadAsyncResult() at System.IO.Pipelines.Pipe.DefaultPipeReader.GetResult(Int16 token)<br> at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpProtocol.ProcessRequests[TContext](IHttpApplication 1 приложение) в Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpProtocol.ProcessRequestsAsync [TContext] (приложение IHttpApplication`1)

Ответы [ 2 ]

0 голосов
/ 28 января 2019

Разрешить CORS с подстановочным знаком при разработке.

//Allow CORS, * wildcard only for development period, be specific once done
app.UseCors(builder => builder.WithOrigins("http://localhost:4200")
.AllowAnyHeader().AllowAnyMethod().AllowCredentials());

Надеюсь, это поможет:)

0 голосов
/ 28 января 2019

Кажется, вам нужно добавить AllowCredentials метод.

Пожалуйста, просмотрите эту документацию об учетных данных в запросах разных источников.

app.UseHttpsRedirection();
app.UseCors(x => x.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader().AllowCredentials());
app.UseAuthentication();
app.UseMvc();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...