gpt4 book ai didi

android - 在 Android 上使用 OAuth 2.0 使用 Google API 的最佳方式

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:29:40 30 4
gpt4 key购买 nike

我正在尝试将使用 OAuth 1.0a 的 Android 应用程序迁移到 OAuth 2.0。 (使用适用于 Java/Android 的 Google API 客户端库来满足我的 OAuth 2.0 需求)。

在 Android 平台上使用 OAuth 2.0 访问 Google API 的最佳/首选解决方案是什么,同时也考虑了可用性方面。用户应该能够以一种简单的方式自动访问,与我的 Android 应用程序无缝集成。

该应用程序当前使用基于 Web 的 OAuth 1.0 流程,我的应用程序弹出一个浏览器让用户授权访问,并使用自定义重定向 URI,我的应用程序能够检索访问 token 。它工作得很好,但我不喜欢我需要离开我的应用程序才能弹出浏览器来显示网页的事实。我在想 OAuth 2.0 可能会解决这个问题,并提供更好的用户体验。

我开始查看 Adroid AccountManager-OAuth2 integration as outlined at Google IO ,因为它不涉及网络浏览器,并且与 Android 的耦合更紧密,但它根本没有按应有的方式工作。它没有记录在案,也不清楚它在未来是否仍然是一个可行的选择。

我现在开始研究标准的 OAuth 2.0 网络流程。

在这里我似乎有 2 个选择:

将 OAuth 2.0 客户端配置为已安装的应用程序,并使用 urn:ietf:wg:oauth:2.0:oob 重定向 URI。

不是很干净的解决方案,因为我不会让我的用户将一些代码复制粘贴到我的应用程序中。这根本不是用户友好的。

Using OAuth 2.0 to Access Google APIs docs提到有一些方法可以轮询页面标题来解析 URL,但我也看到了很多可用性问题,并且真的不想编写这种管道代码。如果存在可以为我执行此操作的客户端库,我很乐意对此进行进一步调查,但现在,我已放弃此选项。

将 OAuth 2.0 客户端配置为网络应用,并使用重定向 URI。

在这里我注意到 OAuth 2.0 禁止非标准方案。以前,可以使用 xoauth://callback 之类的东西,但现在不允许了。配置像 http://mysite.com/oauth2/callback 这样的重定向 URI 时,我无法让 Android 在 Google OAuth 2.0 页面重定向时打开我的 Activity ,尽管已经为它设置了适当的 Intent 过滤器。 http://mysite.com/oauth2/callback只是显示在我的浏览器中。

以下确实有效

Intent i = new Intent(Intent.ACTION_VIEW,Uri.parse("http://mysite.com/oauth2/callback"));
startActivity(i);

但是当 Google OAuth 2 页面重定向到同一个 URL 时,它只会显示在浏览器中。

即使这可行,用户仍会看到一个选择器弹出窗口(在浏览器中打开或使用我的 Android Activity 打开)。从可用性的角度来看,这也是 Not Acceptable 。

我正在寻找比此处概述的解决方案更好的解决方案。

问候,戴维

最佳答案

我最终使用 WebView 组件加载 Google 授权 URL。使用 WebviewClient,我能够拦截正在加载到 Webview 中的页面,因此,当用户接受或拒绝授权请求时,我能够继续流程。

如果用户接受,Google 重定向到的 URL 包含一个“代码”请求参数,应用程序可以用它交换 OAuth 2.0 token 。如果用户不接受,Google 重定向到的 URL 包含一个“错误”请求参数,应用程序可以处理不愉快的场景。

我在博客文章中写下了所有内容:Oauth 2.0 flow in Android

该帖子还包含一个使用 OAuth 2.0 流程和 Latitude API 的示例 Android 应用程序。 Sample code is available in GitGub .

关于android - 在 Android 上使用 OAuth 2.0 使用 Google API 的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6966965/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com