#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. Пожалуйста, не публикуйте только код в качестве ответа, но также объясните, что делает ваш код и как он решает проблему вопроса. Ответы с объяснением обычно более полезны и более качественны, и с большей вероятностью получат одобрение.