在 Angular 2 中使用基本身份验证预检 CORS 请求

Posted

技术标签:

【中文标题】在 Angular 2 中使用基本身份验证预检 CORS 请求【英文标题】:Preflight CORS requests with Basic Authentication in Angular 2 【发布时间】:2016-10-12 13:57:22 【问题描述】:

我正在构建一个 Angular 2 应用程序,它需要向服务器发送一个带有基本身份验证 (https://en.wikipedia.org/wiki/Basic_access_authentication) 的 CORS(跨域资源共享)POST 请求。

我很好地为 POST 请求本身设置了 Authorization 标头,但由于它是 CORS,浏览器首先会自动发送预检 OPTIONS 请求。 不幸的是,服务器配置错误(Why does the preflight OPTIONS request of an authenticated CORS request work in Chrome but not Firefox?)并且在预检中也需要基本身份验证。这是一个第三方服务器,我不能改变它。

有没有办法克服它(例如,将 Authorizion 标头添加到预检,禁用预检,...)?

【问题讨论】:

【参考方案1】:

浏览器发出预检请求只是为了检查是否设置了 CORS 标头。如果它没有获得所需的标头,则您无能为力。它不会发出实际的 POST 请求。

您实际上可以做的是从您控制的服务器发出请求。为您的客户端提供一个 API 来调用您的服务器,然后调用配置错误的服务器并将响应转发给您的浏览器客户端。

【讨论】:

"... 是由服务器制作的..." -- 你的意思是浏览器,对吧?是的,我就是这么想的……谢谢 Günter。 没错,这就是我接下来要去的地方。好的所有服务器端,我都可以控制:-) 我的意思是旧的服务器端,但都是服务器端——为什么不呢。只需要确保下一代人类能够与 REST 交互。

以上是关于在 Angular 2 中使用基本身份验证预检 CORS 请求的主要内容,如果未能解决你的问题,请参考以下文章

Angular 2 - Twitter 搜索 api - 预检时仅应用程序的身份验证错误 400

在 Angular 9 + Asp.net Core Web API 中启用 Windows 身份验证后,预检(选项)请求失败

带有 Windows 身份验证预检问题的 Angular 4 HTTP POST [重复]

使用 CORS 避免预检 OPTIONS 请求

静默刷新在 OPTIONS 预检上进行身份验证,但不在 GET 到 UserInfo 端点上进行身份验证

对 Kong api 网关端点的基本身份验证请求出现 CORS 错误并且未找到预检