无法在跨源访问方案中发送身份验证标头



我在Node.js服务器上启用了跨源通信,这样我的Vue应用程序就可以从不同于提供静态资产的源的源访问其API。这是使用Node.js中的以下代码完成的:

res.setHeader('Access-Control-Allow-Origin', '*');

以及Vue.中的以下JavaScript代码:

fetch(url);

在我引入基于HTTP头的身份验证之前,这种方法一直运行良好。有了这个身份验证,Vue中的JavaScript代码从上面的更改为:

fetch(url, {headers: {'Authorization': bearer}});

一旦引入授权头,浏览器在尝试访问API时开始接收到以下错误:

在'获取的访问权限https://localhost:8001/articles'来自原点http://localhost:8080'已被CORS策略阻止:对的响应飞行前请求未通过访问控制检查:否请求的上存在"Access Control Allow Origin"标头资源如果不透明的响应符合您的需求,请设置请求的模式设置为"no cors"以在禁用cors的情况下获取资源。

因此,引入HTTP Authorization标头似乎会导致飞行前请求无法通过飞行前测试。Mozilla文档证实了这一观点:

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin

对于没有凭据的请求,文本值"*"可以指定为通配符;值告诉浏览器允许请求从任何来源访问资源的代码。正在尝试使用带有凭据的通配符将导致错误。

那么,这是否意味着在跨源请求的场景中根本无法实现基于HTTP标头的身份验证?

更重要的是,如何在我的场景中实现基于HTTP头的授权?

如果您使用的是express服务器,请查看此包[1] :https://expressjs.com/en/resources/middleware/cors.html

最新更新