对预检请求的响应未通过访问控制检查:在标头中使用身份验证时,它没有 HTTP ok 状态 [关闭]

Posted

技术标签:

【中文标题】对预检请求的响应未通过访问控制检查:在标头中使用身份验证时,它没有 HTTP ok 状态 [关闭]【英文标题】:Response to preflight request doesn't pass access control check: It does not have HTTP ok status when using Authentication in Header [closed] 【发布时间】:2020-05-26 18:13:11 【问题描述】:

我在 ISS 服务器中部署了一个 .Net Core 应用程序。在客户端站点中,我有一个使用 axios 与服务器通信的 React 应用程序。

在服务器上这是我修改网络配置的方式

<httpProtocol>
            <customHeaders>
                <remove name="Access-Control-Allow-Origin" />
                <add name="Access-Control-Allow-Credentials" value="true" />
                <add name="Access-Control-Allow-Origin" value="http://localhost:3000" />
                <add name="Access-Control-Allow-Methods" value="GET,PUT,POST,DELETE,OPTIONS" />
                <add name="Access-Control-Allow-Headers" value="Origin, X-Requested-With, Access-Control-Allow-Headers, Content-Type, Authorization" />
                <add name="Access-Control-Max-Age" value="86400" />
            </customHeaders>
        </httpProtocol>

在客户端

const getRequestConfig = async (): Promise<AxiosRequestConfig> => 
  let accessToken = await OAuth2Service.getInstance().GetAccessToken();
  return 
    headers: 
      Authorization: `Bearer $accessToken`
    ,
    withCredentials: true
  ;
;

let config = await getRequestConfig();
    const response = await axios.get(
      `https://myserver/AppService/api/metadata/office`,
      config
    );

我收到一个预检 CORS 错误

访问 XMLHttpRequest 在 'https://myserver/AppService/api/metadata/office' 来自原点 'http://localhost:3000' 已被 CORS 策略阻止:响应 预检请求未通过访问控制检查:它没有 HTTP 正常状态。

如果我从请求标头中删除身份验证,它将通过 CORS,因为它是一个简单的请求。

    我是否错过了服务器站点或客户端站点上的某些配置? 会不会是只有在 localhost 中存在这个问题,并且在部署站点时会通过 CORS?在这种情况下,我可以在浏览器中禁用 CORS。

【问题讨论】:

请不要使用自己的自定义响应头,而是使用 IIS CORS 模块,blogs.iis.net/iisteam/getting-started-with-the-iis-cors-module 谢谢@LexLi,我删除了它们。正如我在回答中解释的那样,不再需要了。 【参考方案1】:

在尝试修复配置文件中的问题后。我意识到问题出在 .NET Core App.首先,应用程序需要工作。如果部署后应用程序在服务器中崩溃,您会在客户端中遇到 CORS 问题,而无需任何解释。您需要在服务器应用程序的启动文件中设置 CORS。在重新发布应用程序并删除客户端中的所有自定义标头以及 withCredentials 后,我能够传递 Bearer 令牌而不会出现任何预检 CORS 错误。

【讨论】:

以上是关于对预检请求的响应未通过访问控制检查:在标头中使用身份验证时,它没有 HTTP ok 状态 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

在 ASP.NET 中,对预检请求的响应未通过访问控制检查:没有“Access-Control-Allow-Origin”标头

对预检请求的响应未通过访问控制检查:请求的资源中不存在“Access-control-Allow-Origin”标头

Angular 7:对预检请求的响应未通过访问控制检查:请求中不存在“Access-Control-Allow-Origin”标头

对预检请求的响应未通过访问控制检查错误

离子视图 - 对预检请求的响应未通过访问控制检查:没有“Access-Control-Allow-Origin”标头

对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。