Cordova 应用程序的 API 服务器 CORS 白名单

Posted

技术标签:

【中文标题】Cordova 应用程序的 API 服务器 CORS 白名单【英文标题】:API Server CORS whitelist for Cordova App 【发布时间】:2016-04-28 23:04:48 【问题描述】:

我有一个 API 服务器,其中包含 API 客户端域的 CORS 白名单,我想使用基于 Cordova 的移动应用程序调用相同的 API 服务器。我应该将哪个域添加到 Cordova 客户端的白名单? 而且我当然不想允许所有来源[所以 * 是不可能的] API服务器是运行在nginx上的php

【问题讨论】:

我对这种说法感到困惑我想使用基于 Cordova 的移动应用程序调用同一个 API 服务器。您使用的词语在技术上是正确的,但您的问题没有什么意义感觉。我认为您对Cordova whitelist plugin 的工作方式有误解。 FWIW:Cordova/Phonegap 不使用 CORS。 问题不在于 Cordova 白名单插件,而在于服务器端白名单。 我对此非常清楚。 Cordova/Phonegap 不使用 CORS。 CORS 从客户端开始,作为协议的一部分。在协议中,服务器告诉客户端接受哪些域。 Cordova/Phonegap 忽略这一点。此外,如果您打算将您的应用程序用作网站的包装器,您的应用程序将被 Google 和 Apple 拒绝。 再说一次,我认为您对 Cordova/Phonegap 的工作方式存在误解。 FWIW:@Sam 也告诉过你同样的事情。 最糟糕的是,您从对科尔多瓦了解很多的人那里得到了很好的答案和 cmets,但您却告诉他们他们错了,而没有尝试他们告诉您的内容。我再告诉你一次。 Cordova 应用程序不会尊重您的服务器 CORS 配置,它们无论如何都会连接,因此您无需在服务器上配置任何内容以允许 Cordova 应用程序连接。在真实设备上尝试。如果某些东西不起作用,则问题不在于服务器 CORS,可能是您的 cordova 白名单插件配置或 CSP 元标记(如果有的话) 【参考方案1】:

如果您可以更改服务器限制以按您所说的添加另一个域,您可以在某处的 URL 上放置一个代理,让 Cordova 应用程序与之通信并让代理调用您的服务器,然后看起来应该会出现来自列入白名单的域。

不理想,但考虑到您描述的限制,这是一个可行的选择。

你可以使用 Node/Express 作为代理,或者配置 nginx,如果熟悉的话,使用 PHP,有几个选项。

您可能还想在代理上启用 CORS,以确保在浏览器中测试 Cordova 应用时不会遇到跨源问题。

【讨论】:

即使我这样做,我也会允许每个域的 CORS 访问服务器,只是通过代理而不是直接访问。但我只想允许少数域 CORS 访问服务器,还允许访问 Cordova 应用程序。 您可以通过配置限制 CORS 域,然后可能还有某种应用程序可以生成的令牌和服务器验证 Cordova 应用程序。【参考方案2】:

从 Cordova 应用程序访问时,无需在服务器端进行任何更改。跨域策略将不适用,因为请求结束于file:// 而不是http。但是,在您的 Cordova config.xml 中,您需要将正在访问的域添加到这样的白名单中 -

<access origin="http://example.com" />

您可以在此处阅读更多相关信息 - https://cordova.apache.org/docs/en/latest/guide/appdev/whitelist/index.html

【讨论】:

config.xml 已经有: 但问题是服务器上实现了白名单。 你是在浏览器上测试这个吗? 您也可以在您的服务器上完全禁用 CORS。它不应该产生影响。 我认为您没有理解这里的意思,服务器不允许 CORS,但除了那些存在于其白名单中的域之外。所以我想弄清楚如何配置它以允许来自白名单和 Cordova 应用程序的 CORS。 我可以更改服务器限制,例如。如果我想为浏览器客户端添加另一个域,我可以添加另一个域,但我不知道要添加什么以允许 Cordova 应用程序。

以上是关于Cordova 应用程序的 API 服务器 CORS 白名单的主要内容,如果未能解决你的问题,请参考以下文章

Cordova 应用程序的 API 服务器 CORS 白名单

COr

Cordova Android 应用程序构建问题 - 重复的 zip 条目

Cordova [Android 平台] 从 API 29 迁移到 API 30

触发 API 网关端点时 COR 配置错误

cordova百度导航插件使用