谷歌禁止通过Webview进行OAuth授权的决定给我带来了巨大的麻烦。迁移到替代方案(我目前正在使用建议的AppAuth库)是一个漫长而艰难的过程,用户也反映无法将账户链接到Chrome/设备上(据我所知,现在不可能在没有强制私人浏览会话的情况下完成)。我的最新问题涉及使用Google OAuth登录另一个服务。以下是场景:
用户想要将第三方服务链接到我的应用程序中。他们在第三方服务上的账户已与Google账户关联。为了使用这个第三方服务进行身份验证,他们必须登录其Google账户。问题在于,该第三方服务仅允许http://协议的重定向URI进行OAuth,因此流程看起来像这样:
1. 用户在其Android设备上使用我的应用程序。 2. 用户点击按钮将其第三方账户与我的应用程序链接。 3. 使用appauth库,我启动了一个浏览器或自定义选项卡,其中包含第三方oauth URL,我们称之为http://thirdparty.com/oauth。 4. 从该页面,用户单击“登录Google”按钮,这会触发Google OAuth流程,然后他们按照提示提供其Google账户令牌给thirdparty。 5. 用户批准使用thirdparty验证其Google账户后访问我的应用程序。 6. thirdparty重定向到已注册的redirect_uri,然后在浏览器选项卡中打开,而不是重定向回我的应用程序。
问题在于步骤6。因为我需要注册一个http://协议的重定向URI,所以浏览器选项卡尝试直接加载网页,即使我已经注册了我的应用程序来处理特定的URL。如果用户不需要使用Google登录,我可以轻松地在Webview中完成整个流程并手动捕获重定向,获取令牌,但由于thirdparty允许用户链接其Google账户,我无法使用Webview,因为Google会阻止用户在Webview中进行Google身份验证,因此我被迫将其传递给我无法控制且依赖其正常运行的应用程序或浏览器选项卡(通常情况下无法正常运行)。
我进行了大量搜索,似乎App Links可以通过将我的应用程序注册为链接的主要处理程序来解决我的问题,但它仅适用于Android 6.0+,高于我的设备最低版本,因此我不知道该怎么办。
我的限制条件是:
用户想要将第三方服务链接到我的应用程序中。他们在第三方服务上的账户已与Google账户关联。为了使用这个第三方服务进行身份验证,他们必须登录其Google账户。问题在于,该第三方服务仅允许http://协议的重定向URI进行OAuth,因此流程看起来像这样:
1. 用户在其Android设备上使用我的应用程序。 2. 用户点击按钮将其第三方账户与我的应用程序链接。 3. 使用appauth库,我启动了一个浏览器或自定义选项卡,其中包含第三方oauth URL,我们称之为http://thirdparty.com/oauth。 4. 从该页面,用户单击“登录Google”按钮,这会触发Google OAuth流程,然后他们按照提示提供其Google账户令牌给thirdparty。 5. 用户批准使用thirdparty验证其Google账户后访问我的应用程序。 6. thirdparty重定向到已注册的redirect_uri,然后在浏览器选项卡中打开,而不是重定向回我的应用程序。
问题在于步骤6。因为我需要注册一个http://协议的重定向URI,所以浏览器选项卡尝试直接加载网页,即使我已经注册了我的应用程序来处理特定的URL。如果用户不需要使用Google登录,我可以轻松地在Webview中完成整个流程并手动捕获重定向,获取令牌,但由于thirdparty允许用户链接其Google账户,我无法使用Webview,因为Google会阻止用户在Webview中进行Google身份验证,因此我被迫将其传递给我无法控制且依赖其正常运行的应用程序或浏览器选项卡(通常情况下无法正常运行)。
我进行了大量搜索,似乎App Links可以通过将我的应用程序注册为链接的主要处理程序来解决我的问题,但它仅适用于Android 6.0+,高于我的设备最低版本,因此我不知道该怎么办。
我的限制条件是:
- oauth重定向必须是HTTP方案(
thirdparty
要求) - 我无法在Webview中进行身份验证(Google要求)
- 我需要我的身份验证重定向启动我的应用程序,以便收集令牌
- 我需要解决方案适用于Android 5.0+上的所有设备
我在搜索了几个小时后没有找到解决这个问题的方法,并且我找不到与Google oauth团队联系以了解他们的建议的方式。
有人找到了一种方法,可以通过http://链接启动应用程序,而不提示用户并且不需要Android 6.0吗?