对预检请求的响应未通过访问控制检查:在标头中使用身份验证时,它没有 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”标头