4

我正在为我的 Cordova 移动应用程序使用 iOS 14 设备/模拟器,该应用程序使用了带有 WkWebView 设置的 cordova-plugin-ionic-webview。

我在 config.xml 中设置了以下选项

<access origin="myapp://mobileapp" />
<allow-navigation href="myapp://mobileapp" />

这使我所有的 xhr 调用都具有“ origin:myapp://mobileapp ”标题。我已经适当地定义了所有 CORS 标头。

现在我的身份验证 XHR 调用有 2 个 API (a) 身份验证和 (b) 升级操作。API (b) 将使用 API (a) 设置的 HTTPOnly 安全 cookie 以便做出适当的响应。

上述两个 API 都可以与 UIWebview、iOS 13.5、iOS 13.7 模拟器和设备完美配合。但是在 iOS 14、iOS 13.3 中失败了。在分析时,我看到 API (a) 中发送的 cookie 未存储在 WkWebview 中,因此在调用 API (b) 时它们不会发送。所以第二个 API 无法完成。

我看到cookie 在首次执行跟踪预防wkwebview 错误时被忽略,但无法识别问题。

当我在 WkWebview 的 In-AppBrowser 中使用 API 时,API 运行良好,但仅在 Cordova 主视图中失败。

在使用 cusotm来源和跨平台 XHR 调用时,我是否必须在 ionic-webviw 插件中设置任何特殊设置?

我的 XHR 调用是对 "* https://mydomain.app.com/api/firstapi*"和 "* https://mydomain.app.com/api/secondapi*"进行的,而firstapi将发送标头" set- cookie ”,域设置为“.app.com”。那么当我们使用自定义来源进行 XHR 调用时,这些 cookie 将被视为第三方 cookie 还是第一方 cookie?

这里的任何帮助都将非常有帮助。我正在寻找使用 HTTPOnly cookie 实现 Cordova+WkWebView+XHR 登录调用的正确方法

4

1 回答 1

2

XCode 12 + iOS 14 通过引入智能跟踪预防技术永久停止同步第三方 cookie 。苹果对此的解决方案是使用App Bound domain

不幸的是,到目前为止,我们无能为力。有像nativeXHR这样的插件,它试图通过将 API 调用路由到本机代码来解决,但不会将 cookie 同步到 wkwebview 的cordova 实例。

更新:

如果只想使用一台服务器,仍然可以同步 Cookie。在 config.xml 中设置以下首选项以匹配您的域。这样,origin 将设置为 app://yourdomain.com。因此 wkwebview 将与域/子域 *.yourdomain.com 同步 cookie。

<preference name="scheme" value="https" />
<preference name="hostname" value="yourdomain.com" />
于 2021-01-09T14:39:26.657 回答