401 对 CORS 预检选项请求的未经授权响应

Hep*_*ram 5 asp.net nginx cors asp.net-web-api asp.net-core

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

\n\n
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 \xe2\x80\x98Access-Control-Allow-Origin\xe2\x80\x99 missing).\n\nCross-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\n
Run Code Online (Sandbox Code Playgroud)\n\n

https://service.staging.domain.com/application-api-staging是我的 Web 客户端的 WebAPI 基础\n https://client.staging.domain.com

\n\n

当我检查 Firefox 控制台时,我有一个请求和响应标头如下:

\n\n

响应标头

\n\n
HTTP/1.1 401 Unauthorized\nServer: nginx/1.10.3\nDate: Fri, 10 Apr 2020 14:55:31 GMT\nContent-Type: application/json; charset=utf-8\nContent-Length: 61\nConnection: keep-alive\nX-DNS-Prefetch-Control: off\nX-Frame-Options: SAMEORIGIN\nStrict-Transport-Security: max-age=15552000; includeSubDomains\nX-Download-Options: noopen\nX-Content-Type-Options: nosniff\nX-XSS-Protection: 1; mode=block\nETag: W/"3d-nALmWVEo7YlT78MufcqgeUavvX4"\n
Run Code Online (Sandbox Code Playgroud)\n\n

请求标头

\n\n
Host: service.staging.domain.com\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:75.0) Gecko/20100101 Firefox/75.0\nAccept: */*\nAccept-Language: fr-FR,fr;q=0.8,en-US;q=0.5,en;q=0.3\nAccept-Encoding: gzip, deflate, br\nAccess-Control-Request-Method: GET\nAccess-Control-Request-Headers: authorization,content-type,tenant\nReferer: https://client.staging.domain.com/application/\nOrigin: https://client.staging.domain.com\nConnection: keep-alive\n
Run Code Online (Sandbox Code Playgroud)\n\n

在我的 webAPIstartup.cs 中,我配置了 CORS:\nstartup.cs

\n\n
readonly string MyAllowSpecificOrigins = "_myAllowSpecificOrigins";\n\nservices.AddCors(options => {\n  options.AddPolicy(MyAllowSpecificOrigins,\n    builder => {\n      builder\n       .AllowAnyOrigin()\n       .AllowAnyHeader()\n       .AllowAnyMethod();\n    });\n});\n\napp.UseCors(MyAllowSpecificOrigins)\n
Run Code Online (Sandbox Code Playgroud)\n\n

在我的控制器中。

\n\n

accountController.cs

\n\n
[EnableCors("_myAllowSpecificOrigins")]\n
Run Code Online (Sandbox Code Playgroud)\n\n

当我在本地测试我的客户端 Web 和 WebAPI 时,\n客户端 Web -> http://localhost:4200 \nWebApi -> https://localhost:44354 \n在这种情况下,我可以发出请求,没有问题。 .. 这行得通

\n\n

但在第二种情况下:\nclient web -> http://localhost:4200 \nWebApi -> https://service.staging.domain.com/application-api-staging \n在这种情况下,我遇到了 CORS 问题,不行

\n\n

第三种情况与 Web 客户端和 WebApi 部署相同\nclient web -> https://client.staging.domain.com/application/ \nWebApi -> https://service.staging.domain.com/application- api-staging \n同样,我有 CORS 问题,不起作用

\n\n

从我的错误消息问题的开头可以看到同样的错误。

\n\n

为什么我的 url staging 出现 CORS 错误?和/或我可以解决这个问题吗?\n这是一个 nginx 问题吗?

\n\n

感谢您的帮助。

\n\n

更新

\n\n

WebAPI 和 Webclient 在 Linux 服务器上工作,所以我不使用 IIS,但使用 NGINX。

\n\n

我如何配置NGINX,或者可能是asp.net核心配置问题?

\n

小智 13

检查 StartUp.cs 中的中间件使用顺序 UseCors() 应位于 UseAuthorization() 之前


jav*_*asd 3

试试这个,对我有用

在launchSettings.json 中的iisSettings 下,将anonymousAuthentication 和windowsAuthentication 设置为true。

"iisSettings": {
"windowsAuthentication": true,
"anonymousAuthentication": true,
"iisExpress": {
  "applicationUrl": "http://localhost:8791/",
  "sslPort": 0
}
Run Code Online (Sandbox Code Playgroud)