12

Google 不再允许嵌入 webview,因为它是disallowed_useragent用于 OAuth 登录的。在大多数情况下,这完全没问题,并且有一种解决方法。但是,我遇到了这样一种情况,这会阻止网站使用 Web 服务器 OAuth 实现。

问题:

运行 Google PHP SDK 的 Nginx PHP 服务器,使用他们的 O-Auth 实现。这适用于除嵌入浏览器之外的所有内容。通常这是可以的,但是,如果用户尝试在使用嵌入式浏览器的应用程序中注册我们的网站,我们会收到disallowed_useragent错误消息(见底部图片)。这在 Android Facebook Messenger 中似乎不是问题,但可以在 iPhone 7 Plus Facebook Messenger 上复制。

目前的研究:

我试图寻找明确的解决方法。例如,强制链接在主要手机浏览器(例如 Safari 应用程序)中打开的方法,但所有实现都指向应用程序端修复,这不能从网站完成。

问题:

当某些用户可能正在使用这些嵌入式浏览器时,我如何实施 Google Oauth,而不需要用户采取额外的手动操作(例如在 Safari/Chrome 中打开)?

在此处输入图像描述

4

2 回答 2

7

这个问题非常基于意见,但我会给你我的意见。

当某些用户可能正在使用这些嵌入式浏览器时,我应该如何实施 Google Oauth,而不让用户采取额外的行动?

你真的不能。如果有人在 Facebook Messenger(嵌入式浏览器)中使用嵌入式浏览器来打开您的身份验证链接,则它不起作用。据我所知,没有办法强制或超越 Facebook Messenger 或任何其他使用其自己的嵌入式浏览器的应用程序。同样,这只是我的观点,但是有很多应用程序已经开始强迫他们的用户使用这些嵌入式浏览器。人们可能会质疑它们的安全性以及使用真实安装的浏览器会更好。你认为这就是谷歌开始启用它的原因吗?

我想避免走上检测用户代理网页端的道路,并强制用户在 Safari 中打开链接。

我不知道这对我来说听起来像是一个相当不错的解决方案。它可能会让人感觉有点过头了,但如果它有效,那就去吧。

于 2017-03-15T07:42:53.327 回答
6

还有另一种情况会导致问题。如果你有一个网络应用程序——不是带有嵌入式浏览器的本机应用程序——用户总是可以选择将快捷方式放在 iOS 中的主屏幕上。但是当他们去那个 HomeScreen 快捷方式运行应用程序时,它会从用户代理字符串中删除“Safari/6xx.x”。现在,谷歌将其视为“嵌入式浏览器”并拒绝访问 OAuth。

所以 - “没有 Web-App-Capable” 适合您!

如果您关闭此元标记:

<meta name="apple-mobile-web-app-capable" content="yes"/>

在 iOS 中发生了两件事:网站现在在 Safari 浏览器窗口中打开,而不是更清洁的 Web-App 方法。该网站使用完整的 Safari 用户代理,这将允许 OAuth 工作。

真正的耻辱是谷歌(拒绝非标准浏览器访问 OAuth)和苹果(在用户代理中删除主屏幕快捷方式的 Safari 版本)的决定让我们陷入了任何可能看起来真的网站的角落网络应用模式下的 nice 无法使用来自 google 的此 OAuth。

我一直在尝试找到一种方法来欺骗用户代理以将 safari 版本添加到其中,以便一切都在主屏幕网络应用程序中运行,但我认为我不能让它工作。safari 似乎不允许您更改 navigator.userAgent ,最重要的是,我不确定它将如何处理 WebApp 模式下的新弹出窗口。

于 2017-05-07T17:01:58.660 回答