AWS ASP.NET Core 2.1 和带角度的 CORS

Posted

技术标签:

【中文标题】AWS ASP.NET Core 2.1 和带角度的 CORS【英文标题】:AWS ASP.NET Core 2.1 and CORS with angular 【发布时间】:2021-01-26 15:30:34 【问题描述】:

这只是另一个 CORS 问题。该设置是用 ASP.NET Core 2.1 编写的 AWS Lambda 函数。在 ASP.NET Core 后端启用 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 和 Authentication 标头中的不记名令牌进行查询。

对服务器的第一个请求是带有以下标头的 OPTIONS 请求:

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

此响应是从 AWS API Gateway 生成的,因为 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 从德语翻译过来的。

有一些技巧,例如在 AWS 功能中激活 cors,但没有任何效果。

慢慢地我觉得我太愚蠢了。也许这里的其他人有小费给我?

【问题讨论】:

【参考方案1】:
 builder.AllowAnyHeader()
                    .AllowAnyMethod()
                    .AllowAnyOrigin();

试试这个

【讨论】:

感谢您的回答。起初它根本不起作用(也没有 GET 请求)。在我在 TokenInterceptor 删除客户端(Angular)中的 withCredentials 之后,GET 请求再次起作用。不幸的是,我仍然对 POST 请求有相同的行为。 您必须允许来自 AWS 的客户端 IP 地址 在 API 网关我启用了 CORS 并部署了 API。默认 4XX 和大多数其他网关响应配置为“Access-Control-Allow-Origin = '*', Access-Control-Allow-Methods = 'DELETE,GET,HEAD,OPTIONS,PATCH,POST,PUT' 和 Access -Control-Allow-Headers = 'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token'。你是这个意思吗? @MehmetCeylan 我不会投票关闭它,因为它引导用户找到答案。但它需要更多的解释,而不仅仅是“试试这个”。即使是一个完整的句子也会有所帮助。 请不要只发布代码作为答案,还要解释您的代码的作用以及它如何解决问题的问题。带有解释的答案通常更有帮助、质量更好,并且更有可能吸引投票。

以上是关于AWS ASP.NET Core 2.1 和带角度的 CORS的主要内容,如果未能解决你的问题,请参考以下文章

AWS负载均衡器后面的ASP.NET Core 2.1 HTTPS重定向?

Angular 6 与 Asp.net Core 2.1 不存在“Access-Control-Allow-Origin”标头

如何在 ASP.NET (Core 2) Web 应用程序中访问来自 AWS 的认证?

ASP.NET Core AWS Cognito JWT

ASP.NET Core AWS 无服务器和 CORS

ASP.NET Core 托管捆绑包 5 是不是也可以运行 .NET/ASP.NET Core 2.1 应用程序?