在 google oauth 后,如何在不使用 webview 的情况下将用户重定向回我的应用程序?

2024-02-01

谷歌决定禁止通过 webview 进行 oauth 给我带来了巨大的麻烦。迁移到替代方案是一个漫长而困难的过程(我目前正在使用建议的 AppAuth 库),并且我收到用户抱怨,如果不将帐户添加到 chrome/他们的设备(这作为据我所知,如果不以某种方式强制进行私人浏览会话,现在是不可能的)。我的最新问题涉及 google oauth 登录另一个服务。这是场景:

用户想要将第三方服务链接到我的应用程序。他们在第三方服务上的帐户链接到谷歌帐户。要使用此第三方服务进行身份验证,他们必须登录其 Google 帐户。问题是第三方服务only允许 http:// 方案重定向 URI 进行 oauth,因此流程如下所示:

  1. 用户在其 Android 设备上使用我的应用程序
  2. 用户单击按钮链接他们的thirdparty我的应用程序帐户
  3. 使用 appauth 库,我启动一个浏览器或自定义选项卡,其中包含第 3 方的 oauth URL,我们称之为http://thirdparty.com/oauth
  4. 在该页面上,用户单击“登录 google”按钮,这会触发 google oauth 流程,然后用户按照该流程向其提供 google 帐户令牌thirdparty
  5. 用户批准访问我的应用程序thirdparty现在thirdparty已验证他们的 Google 帐户
  6. thirdparty重定向到已注册的redirect_uri然后在浏览器选项卡中打开它,而不是重定向回我的应用程序。

问题出在第6步。因为我需要注册一个http://方案重定向 URI,浏览器选项卡会尝试直接加载网页,即使我已经注册了我的应用程序来处理该特定 url。现在,如果用户不需要能够使用谷歌登录,我可以轻松地在网络视图中完成整个流程并手动捕获重定向,获取令牌,但是因为thirdparty允许用户链接他们的谷歌帐户,我无法使用网络视图,因为谷歌会阻止用户在网络视图中执行谷歌身份验证,所以我被迫传递到我无法控制的应用程序或浏览器选项卡我依赖于正确的行为(但通常情况并非如此)

我进行了大量搜索,看起来应用程序链接可以通过将我的应用程序注册为链接的主要处理程序来解决我的问题,但这仅适用于 Android 6.0+,它高于我的设备最低版本,所以我处于我不知道自己应该在这里做什么。

我的限制是:

  1. oauth 重定向必须是 HTTP 方案(需要thirdparty)
  2. 我无法在网络视图中进行身份验证(谷歌要求)
  3. 我需要身份验证重定向来启动我的应用程序以收集令牌
  4. 我需要适用于 Android 5.0+ 上的所有设备的解决方案

经过几个小时的搜索,我没有找到解决这个问题的单一解决方案,而且我也没有找到与 google oauth 团队联系以了解他们的建议的方法。

有没有人找到一种方法让 http:// 链接启动应用程序而不提示用户并且不需要 android 6.0?


如果您可以控制重定向 URI,则可以将您的应用程序设置为使用自定义侦听它意图处理程序 https://developer.android.com/training/app-links/index.html。这本质上是深度链接的一种形式,并且应该适用于 Android 5+(在 6 中,您甚至可以将您的应用程序设置为默认值!)。

对于数据,您很可能需要使用 URI 本身 https://stackoverflow.com/questions/35038208/intent-filter-passing-data-through-url-and-reading-into-activity。但假设您可以控制重定向,那么这应该不会太难。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 google oauth 后,如何在不使用 webview 的情况下将用户重定向回我的应用程序? 的相关文章