401未授权响应CORS预检请求

5

我在ASP.NET CORE的WebApi中遇到了CORS问题,当我使用我的客户端发起HTTP GET请求时,出现了以下错误:

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://service.staging.domain.com/application-api-staging/account. (Reason: CORS header ‘Access-Control-Allow-Origin’ missing).

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://service.staging.domain.com/application-api-staging/account. (Reason: CORS request did not succeed

https://service.staging.domain.com/application-api-staging 是我的WebAPI基础地址,https://client.staging.domain.com 是我的Web客户端地址。

当我检查 Firefox 控制台时,我看到以下的请求和响应头:

响应头:

HTTP/1.1 401 Unauthorized
Server: nginx/1.10.3
Date: Fri, 10 Apr 2020 14:55:31 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 61
Connection: keep-alive
X-DNS-Prefetch-Control: off
X-Frame-Options: SAMEORIGIN
Strict-Transport-Security: max-age=15552000; includeSubDomains
X-Download-Options: noopen
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
ETag: W/"3d-nALmWVEo7YlT78MufcqgeUavvX4"

请求头部

Host: service.staging.domain.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:75.0) Gecko/20100101 Firefox/75.0
Accept: */*
Accept-Language: fr-FR,fr;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate, br
Access-Control-Request-Method: GET
Access-Control-Request-Headers: authorization,content-type,tenant
Referer: https://client.staging.domain.com/application/
Origin: https://client.staging.domain.com
Connection: keep-alive

在我的Web API的startup.cs文件中,我配置了CORS:

readonly string MyAllowSpecificOrigins = "_myAllowSpecificOrigins";

services.AddCors(options => {
  options.AddPolicy(MyAllowSpecificOrigins,
    builder => {
      builder
       .AllowAnyOrigin()
       .AllowAnyHeader()
       .AllowAnyMethod();
    });
});

app.UseCors(MyAllowSpecificOrigins)

在我的控制器中。

accountController.cs

[EnableCors("_myAllowSpecificOrigins")]
当我在本地使用客户端 Web 和 WebAPI 进行测试时, 客户端 Web -> http://localhost:4200 WebApi -> https://localhost:44354 在这种情况下,我可以发送请求,没有问题...它工作正常。 但是在第二种情况下: 客户端 Web -> http://localhost:4200 WebApi -> https://service.staging.domain.com/application-api-staging 在这种情况下,我有一个 CORS 问题,无法正常工作。 同样的情况也出现在客户端 Web 和 WebApi 部署的第三种情况中: 客户端 Web -> https://client.staging.domain.com/application/ WebApi -> https://service.staging.domain.com/application-api-staging 同样,我有一个 CORS 问题,无法正常工作。 在我的问题的开头看到了相同的错误消息。 为什么我在 staging url 上遇到了 CORS 错误?我该如何解决它? 这是一个 Nginx 问题吗? 感谢您的帮助。 更新: WebAPI 和 Web 客户端在 Linux 服务器上运行,所以我没有使用 IIS,而是使用了 NGINX。 我应该如何配置 NGINX?或者这可能是 asp.net core 配置的问题吗?

真正的问题是服务器对预检OPTIONS请求做出了401未授权错误的响应。您需要配置该服务器,以便不要为OPTIONS请求要求身份验证。换句话说,您没有CORS问题需要解决 - 您需要解决401问题。 - sideshowbarker
@sideshowbarker,感谢您的帮助,我能在WebAPI中修复问题吗?还是这是反向代理或其他问题? - Heptagram
2个回答

11

检查 StartUp.cs 中中间件使用顺序,UseCors() 应该在 UseAuthorization() 之前调用。


3

我试过这个方法,对我有效。

在launchSettings.json文件中,找到iisSettings,将anonymousAuthentication和windowsAuthentication设置为true。

"iisSettings": {
"windowsAuthentication": true,
"anonymousAuthentication": true,
"iisExpress": {
  "applicationUrl": "http://localhost:8791/",
  "sslPort": 0
}

1
哇,你救了我的命。这是唯一正确的答案。我检查了几天CORS配置,而这个OPTIONS问题让我发疯了。谢谢你,不管你是谁。如果你需要什么,比如公交车票之类的,告诉我吧;-) - Henry.K
@Henry.K 实际上,我正在寻找在荷兰提供签证支持的工作,如果您知道任何机会,请告诉我。哈哈 - javidasd

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,