nginx CORS / Cross Origin Isolation / Google API

iyzzxitl  于 2023-08-03  发布在  Nginx
关注(0)|答案(1)|浏览(138)

我正在尝试将Zoom Web Video SDK集成到现有的Web应用程序中,由于性能原因,SharedArrayBuffer已经成为一个需求,为了启用它,网站必须实现跨源隔离。我已经继续向NGINX添加了必要的配置,即:

add_header 'Cross-Origin-Embedder-Policy' 'require-corp';
add_header 'Cross-Origin-Opener-Policy' 'same-origin';

字符串
......但当然,这对先前存在和工作的网站的其余部分产生了连锁React。Google API似乎无法成功加载。
我更改了index.html,将crossorigin属性添加到Google API脚本标记中,如下所示:

<script src="https://apis.google.com/js/platform.js" async defer crossorigin></script>


...在我的JavaScript源代码中,我有(释义和降低复杂性以获得重点):

gapi.load('client:auth2', function() { 
  gapi.client
  .init({
     client_id: 'MY-CLIENT-ID',
     cookiepolicy: 'single_host_origin',
     discoveryDocs: ['https://classroom.googleapis.com/$discovery/rest?version=v1'],
     scope: 'profile email'
  })
  .then(() => console.log('init finished'))
  .catch(e) => console.error('init failed', e));
});


在这段代码中,gapi和gapi.client定义良好,但init调用从未完成(then或catch中没有控制台日志)。查看devtools中的network选项卡,会看到一个失败的GET请求:
https://content-classroom.googleapis.com/static/proxy.html?usegapi=1& ...还有一堆其他的东西,我不确定是否敏感,所以我省略了
当你进入响应时,它显示:
要使用来自不同来源的资源,服务器需要在响应头中指定跨来源资源策略:

  • 跨源资源策略:same-site如果资源和文档从同一站点提供,请选择此选项。
  • 跨源资源策略:cross-origin仅当包含此资源的任意网站不会造成安全风险时才选择此选项。

显然,我不能控制谷歌的服务器做什么,但有人能告诉我如何才能让它正确工作吗?这只会在我的NGINX配置更改的情况下出错。

更新

我通过单独获取API的发现文档并将结果传递给gapi.client.init方法而不是URL来部分解决这个问题。然而,虽然我不再在devtools的network选项卡中获得上述结果,但我却得到了奇怪/不一致的结果,例如“popup_closed_by_user”和“popup_closed_by_browser”响应我的GoogleAuth.signIn调用。如果我从NGINX中删除头文件,它就会再次按照预期运行。我不明白这是怎么回事。

mccptt67

mccptt671#

https://web.dev/cross-origin-isolation-guide/#enable-cross-origin-isolation访问该链接并通读。
它提到,弹出的行为是目前影响启用这些标题,这解释了你的行为。
你必须通读并自己决定这是否解释了你的问题。

相关问题