对预检请求的响应未通过访问控制检查:在 Header 中使用身份验证时没有 HTTP ok 状态

Response to preflight request doesn't pass access control check: It does not have HTTP ok status when using Authentication in Header

我已经在 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 错误

Access to XMLHttpRequest at 'https://myserver/AppService/api/metadata/office' from origin 'http://localhost:3000' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: It does not have HTTP ok status.

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

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

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