AWS ASP.NET Ядро 2.1 и CORS с угловым

#angular #amazon-web-services #asp.net-core #cors

#angular #amazon-веб-сервисы #asp.net-ядро #cors

Вопрос:

это просто еще одна проблема CORS. Настройка представляет собой лямбда-функцию AWS, написанную на ASP.NET Ядро 2.1. На ASP.NET Включен основной сервер CORS:

  public IServiceProvider ConfigureServices(IServiceCollection services)
 {
     ...
     options.AddPolicy("DeveloperCors", builder =>
     {
         builder.AllowAnyOrigin()
                .AllowAnyMethod()
                .AllowAnyHeader()
                .AllowCredentials();
     }
     ...
 }

 public void Configure(IApplicationBuilder app, IHostingEnvironment env, IActionDescriptorCollectionProvider  actionDescriptorProvider)
 {
     ...
     app.UseCors("DeveloperCors");
     ...
 }
  

Клиентское приложение запрашивает с помощью Angulars common/http и с токеном на предъявителя в заголовке аутентификации.

Первый запрос к серверу — это запрос ПАРАМЕТРОВ с этими заголовками:

 Accept:                             */*
Accept-Encoding                     gzip, deflate, br
Accept-Language                     de,en-US;q=0.7,en;q=0.3
Access-Control-Request-Headers:     authorization,content-type
Access-Control-Request-Method:      POST
Connection:                         keep-alive
Host:                               devperts-test2.d-velop.cloud
Origin:                             http://localhost:4200
Referer:                            http://localhost:4200/
TE:                                 Trailers
User-Agent:                         Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:81.0) Gecko/20100101 Firefox/81.0
  

И ответ таков:

 access-control-allow-credentials:   true
access-control-allow-headers:       authorization,content-type
access-control-allow-origin:        http://localhost:4200
content-security-policy:            frame-ancestors 'self'
date:                               Mon, 12 Oct 2020 09:58:56 GMT
server:                             openresty/1.15.8.3
vary:                               Origin
x-amz-apigw-id:                     XXXXX
x-amzn-requestid:                   XXXXX
x-amzn-trace-id:                    XXXXX
X-Firefox-Spdy:                     h2
x-frame-options:                    SAMEORIGIN
  

В журнале AWS я вижу ответ от моего приложения. Затем клиент отправляет POST-запрос:

 Accept:                             application/json, text/plain, */*
Accept-Encoding:                    gzip, deflate, br
Accept-Language:                    de,en-US;q=0.7,en;q=0.3
Authorization:                      Bearer XXXXX
Connection:                         keep-alive
Content-Length:                     212
Content-Type:                       application/json
Host:                               devperts-test2.d-velop.cloud
Origin:                             http://localhost:4200
Referer:                            http://localhost:4200/
TE:                                 Trailers
User-Agent:                         Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:81.0) Gecko/20100101 Firefox/81.0
  

И сервер отвечает:

 content-encoding:                   gzip
content-security-policy:            frame-ancestors 'self'
content-type:                       text/plain
date:                               Mon, 12 Oct 2020 09:58:56 GMT
server:                             openresty/1.15.8.3
vary:                               Accept-Encoding
X-Firefox-Spdy:                     h2
x-frame-options:                    SAMEORIGIN
  

Этот ответ генерируется из шлюза API AWS, поскольку в журнале CloudWatch нет записи. В окне консоли моего браузера я вижу следующие сообщения:

 Cross-source (cross-origin) request blocked: The same source rule prohibits reading the external resource on https://devperts-test2.d-velop.cloud/XXXX. (Reason: CORS header 'Access-Control-Allow-Origin' is missing).
  

Это переведено с немецкого deepl.

Есть серверные подсказки, такие как активация cors в функции AWS, но ничего не сработало.

Медленно я думаю, что я слишком глуп для этого. Может быть, у кого-то еще есть совет для меня?

Ответ №1:

  builder.AllowAnyHeader()
                    .AllowAnyMethod()
                    .AllowAnyOrigin();
  

попробуйте это

Комментарии:

1. Спасибо за ваш ответ. Сначала он вообще не работал с ним (также не было GET-запросов). После того, как я удалил withCredentials в клиенте (Angular) в TokenInterceptor, запросы GET снова сработали. К сожалению, у меня все еще такое же поведение с запросами POST.

2. Вы должны разрешить IP-адрес клиента из AWS

3. На шлюзе API я включил CORS и развернул API. Ответы шлюза для 4XX по умолчанию и большинства других настроены следующим образом: «Access-Control-Allow-Origin = ‘*’, Access-Control-Allow-Methods = ‘УДАЛИТЬ, ПОЛУЧИТЬ, ЗАГОЛОВОК, ПАРАМЕТРЫ, ИСПРАВИТЬ, ОПУБЛИКОВАТЬ, ПОМЕСТИТЬ’ и Access-Control-Allow-Headers = ‘Содержимое-Тип, X-Amz-Дата, авторизация, X-Api-ключ, X-Amz-Security-токен». Вы это имели в виду?

4. @MehmetCeylan Я не собираюсь закрывать это, потому что это заставило пользователя найти ответ. Но это требует дополнительных объяснений, а не просто «попробуйте это». Даже полное предложение помогло бы.

5. Пожалуйста, не публикуйте только код в качестве ответа, но также объясните, что делает ваш код и как он решает проблему вопроса. Ответы с объяснением обычно более полезны и более качественны, и с большей вероятностью получат одобрение.